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 de référence croisée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Par défaut Problème de référence croisée
    Bonjour,

    Je travaille sur 3 classes.
    Si on schématise, on aurait les classes A, B et C.

    La classe A va créer des objets B.
    La classe A va créer des objets C.

    La classe B a besoin d'accéder à la classe A.
    La classe C a besoin d'accéder à la classe A.

    Jusque là, ca va. J'obtiens ceci :

    Classe A.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class B;
    class C;
     
    class A:
    {	
    public:
        A();
    }
    Classe A.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "A.h"
    #include "B.h"
    #include "C.h"
    ---------------------------------------------------------------

    Classe B.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "A.h"
     
    class B:
    {	
    public:
        B();
    }
    Classe B.cpp :
    ---------------------------------------------------------------

    Classe C.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "A.h"
     
    class C:
    {	
    public:
        C();
    }
    Classe C.cpp :

    Toutefois, maintenant, j'aurais besoin que mes objets <B> puissent accéder aux objets <C> instantiés par ma classe <A>.
    Exemple : objetB->createurObjetA->objetC->...

    Je ne comprends pas comment faire

    Si j'essaie de faire comme indiqué ci-dessus, mon compilateur me retourne une erreur du type :
    "Invalid use of undefined type 'struct <C>'"

    Auirez-vous une idée, s'il vous plait ?
    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    Bonjour,

    as-tu regardé cette faq ?

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    C'est bien de simplifier le code mais pas trop quand même, car si je le prend tel quel il n'y a aucunes raisons pour que B.h et C.h fassent un #include "A.h" !

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Par défaut
    C'est à partir de cette FAQ que j'ai fait mes classes, précisément.
    Toutefois elle ne répond pas à mon problème

    J'ai une solution tout simple : <A> possède des fonctions qui permettent d'acceder (get/set/...) et de modifier les variables dont j'ai besoin dans <B> et <C>.
    Lorsque <B> veut modifier l'objet <C> instantié par <A>, il ne le connait pas réelement puisqu'il n'a pas eu d'include de C.h mais seulement une défnition de classe pour le compilo.

    Maintenant, l'objet <B> peut appeler la fonction de <A> qui va modifier l'objet <C>.

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Je ne vois pas où est ton problème :

    A dépend de C : car A contient un attribut de type C
    B dépend de A (et donc de C) : car B utilise une méthode de A qui lui renvoi un objet de type C

    Il n'y a pas de référence croisée, à moins que tu ne nous dit pas tout.

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 157
    Par défaut
    Comme je l'ai dit dans mon premier post :

    <A> crée un objet <B>. Cet objet <B> a besoin d'intervenir sur son créateur <A>.
    <A> crée un objet <C>. Cet objet <C> a besoin d'intervenir sur son créateur <A>.

    Ca nous fait deux références croisées, sauf si je n'ai rien compris à la FAQ
    Et c'est en plus de ce méli-melo que l'objet <B> cherche à accéder à l'objet <C> créé par <A>

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

Discussions similaires

  1. Problème de déclaration avec références croisées
    Par lpierard dans le forum Débuter
    Réponses: 2
    Dernier message: 20/11/2009, 15h10
  2. [Template] problème de références croisées
    Par ded jay dans le forum C++
    Réponses: 3
    Dernier message: 24/08/2008, 15h20
  3. Gros problème de conception : référence croisée
    Par Baptiste Wicht dans le forum Général Java
    Réponses: 14
    Dernier message: 26/04/2007, 13h14
  4. Problème de référence de données circulaire
    Par Wismerhill50 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2005, 22h38
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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