IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème d'inclusions cycliques


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut Problème d'inclusions cycliques
    Bonjours à vous !

    Je me trouve confronté à un problème assez gênant lors de la réalisation d'un projet tuteuré. Pour vous resituer dans le contexte, je crois créer des zombies, par conséquent des anciens humains contaminés, et qui appartiennent à un groupe.

    Le problème est qu'un zombie pointe vers un Groupe de zombie déjà instancié, hors un Groupe est crée à partir d'un zombie déjà instancié lui aussi. Du coups si je corrige l'inclusion cyclique dans l'un ( 'Group does not name a type', elle se présente dans l'autre sous la forme de expected ')' before '*' token sur mon constructeur de Group.

    Je vous inclus les fichiers avec en commentaire les opérations que j'ai effectué pour que la seconde erreur apparaîsse.

    Zombie.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #ifndef ZOMBIE_H
    #define ZOMBIE_H
    #include "./Human.h" 
    // [Seconde erreur] : #include "./Group.h"
     
    class Zombie : public Human
    {
        public:
            static const unsigned short m_CONTAGION_RADIUS=2;
            Zombie(int id, Coordinate coord);
            ~Zombie();
            /* Permet d'ajouter un humain au nombre de victimes contaminés */
            bool hasContamined();
            /* Permet de récuperer le nombre d'humain contaminés par le zombie */
            unsigned short getContagionAmount();
        protected:
        private:
            unsigned short m_contagionAmount;
            Group* m_groupe;
    };
     
    #endif // ZOMBIE_H
    Zombie.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #include "Zombie.h"
    #include "Group.h" // [Seconde erreur] : Include supprimé
    #include "../FloorData/Coordinate.h"
     
    Zombie::Zombie(int id, Coordinate coord, *Group myGroup) : Human(id, coord), m_group(myGroup), m_contagionAmount(0)
    {
    }
     
    Zombie::~Zombie()
    {
        //dtor
    }
     
    bool Zombie::hasContamined(){}
     
    unsigned short Zombie::getContagionAmount(){}
    Group.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #ifndef GROUP_H
    #define GROUP_H
    #include <vector>
    #include "Zombie.h" // [Seconde erreur] : Include supprimé
     
    class Group
    {
        public:
            Group(Zombie* aZombie);
     
            /* Permet de récuperer la liste des groupes instanciés lors de la partie */
            static std::vector<Group*> getGroupList();
            /*  Permet d'ajouter un zombie au groupe ciblé
            *   Param : Le nouveau zombie à ajouter*/
            bool addZombie(Zombie* newZombie);
            /*  Permet de supprimer le zombie en question du groupe *
            *   Param : Le zombie à supprimer */
            bool delZombie(Zombie* aZombie);
            /*  Permet de récuperer la liste des zombies appartenant au groupe ciblé */
            std::vector<Zombie*> getZombieList();
            /*  Permet de récuperer le nombre total de zombies appartenant au groupe ciblé */
            int size();
     
        protected:
        private:
            static std::vector<Group*> GROUP_LIST;
            std::vector<Zombie*> zombiesList;
    };
     
    #endif // GROUP_H
    Group.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include "Group.h"
     // [Seconde erreur] : #include "Zombie.h"
    #include <vector>
     
    using namespace std;
     
    vector<Group*> Group::getGroupList{}
     
    Group::Group(Zombie* aZombie)
    {
    }
     
    bool Group::addZombie(Zombie *newZombie){}
     
    bool Group::delZombie(Zombie *newZombie){}
     
    vector<Zombie*> Group::getZombieList(){}
     
    int Group::size(){}

    Je sais pas si j'ai réeussi à être clair... Mais j'espère que vous pourrez m'aider !

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    FAQ C++: forward declaration et référence cyclique


    Le lien

    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    Si tu regardes le code, j'utilise dans le second cas des déclarations anticipées, comme stipulé dans la FAQ que tu viens de m'envoyer....

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Où?
    J'ai beau chercher, je ne vios pas plus que Davidbrcz de déclaration anticipée...
    Précisément, je ne vois pas la ligne:
    dans Group.h
    ...

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Non, tu ne mets pas en oeuvre ce qu'il y dans la FAQ (+1 avec le message au dessus de moi).

    De ce que je vois:
    Zombie dérive de Human. Un include human.h est obligatoire dans Zombie.h
    Zombie dispose aussi dun pointeur sur un groupe. Une forward declaration class Group; suffit pour cet aspect.

    Group dispose de pointeur vers des Zombies. Une FW class Zombie; au début de Group.h suffit
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    J'ai ajouté le class zombie; et ça fonctionne maintenant.

    Je vous remercie pour vos réponses !

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Dreimus Voir le message
    J'ai ajouté le class zombie; et ça fonctionne maintenant.

    Je vous remercie pour vos réponses !
    C'est bien, c'est ce qu'il fallait faire...

    Mais as tu au moins compris pourquoi il fallait le faire
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème inclusion cyclique
    Par marion5515 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/05/2009, 13h53
  2. Réponses: 2
    Dernier message: 25/04/2006, 17h08
  3. Problème d'inclusions multiples
    Par Le Furet dans le forum C
    Réponses: 2
    Dernier message: 03/10/2005, 23h59
  4. Problème d'inclusion de pages.
    Par julien85 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 01/05/2005, 18h06
  5. Problème d'inclusion
    Par degreste dans le forum MFC
    Réponses: 5
    Dernier message: 27/01/2004, 00h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo