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 :

mic mac de forward declaration !


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut mic mac de forward declaration !
    Bonsoir , j'ai un problème pour créer un tableau d'objets d'une autre classe dans une classe . Je pense que ça vient des forward declaration mais c'est bizarre , je m'explique :

    J'ai trois classes : A , B et C
    A.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include A.h
    #include B.h
    #include C.h
    A.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    class B;
    class C;
    B.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include B.h
    #include C.h
    B.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include A.h
    class C;
    C.cpp
    C.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include A.h
    #include B.h
    J'ai besoin de connaitre ceci:
    -) les classes B et C dans A.h
    -) les classes A et C dans B.h
    -) la classe B dans C.h

    Pour en revenir au début de mon message , j'ai donc un problème lorsque je déclare dans B.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C tab[10];  // erreur : field 'tab' has incomplete type
    Alors que ceci marche parfaitement :
    Donc j'en viens à penser que ça n'a rien avoir avec les forward declaration parce qu'au final il connait quand meme ma classe si j'arrive à coder la seconde ligne mais on ne sait jamais , c'est pourquoi je m'en remet à vous

    Merci à ceux qui prendront la peine de lire ce poste , bonne fin de soirée !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La déclaration anticipée ne fonctionne que lorsque tu ne déclares qu'un pointeur ou une référence, dans ce cas le compilo n'a pas besoin de savoir comment est faite la classe.
    Or dans ton premier cas, un tableau de C, ce ne sont ni des pointeurs ni des références et la déclaration anticipée ne suffit pas.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    Merci de ta réponse , dans ce cas , que faut-il faire ? je me casse la tête à changer les includes mais ca ne mène à rien , si qq1 a déjà été confronté au problème , help

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    On peut voir les déclarations des classes B et C ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    oui bien sur , voici pour être plus complet :
    B.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
     
    #ifndef __B_H__
    #define __B_H__
    #include A.h
    class C;
    class B
    {
       private:
        ...
        C tab[10];
        public:
          ...
    };
    #endif
    C.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifndef __C_H__
    #define __C_H__
    #include A.h
    #include B.h
    class C
    {
        private: B* refB;
        public : ...
    };
    #endif

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pourquoi C.h a-t-il besoin d'inclure B.h ?

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    Désolé j'avais oublié de le mettre , j'ai besoin d'un pointeur vers un objet B dans ma classe C. j'ai édité

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    bonjour , finalement j'ai utilisé un pointeur
    merci de tes explications

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

Discussions similaires

  1. forward declaration sous template
    Par Kurisu dans le forum Langage
    Réponses: 9
    Dernier message: 15/08/2008, 22h58
  2. Probleme de forward declaration
    Par vandamme dans le forum C++
    Réponses: 10
    Dernier message: 09/10/2007, 19h10
  3. Probleme de forward declaration
    Par vandamme dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 05/10/2007, 18h16
  4. Probleme de forward declaration
    Par porco dans le forum C++
    Réponses: 2
    Dernier message: 15/10/2006, 17h15
  5. has incomplete type,forward declaration of ,
    Par Pragmateek dans le forum C++
    Réponses: 12
    Dernier message: 22/07/2006, 15h03

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