Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C++] inclusion mutuelle

Sujet résolu
    6 août 2008 à 11:25:44

    Bonjour,

    J'ai déjà utilisé des inclusions mutuelles, mais jusqu'ici l'une des deux classes concernées n'avait pas besoins de connaitre les méthodes de l'autre. Comment puis-je faire en sorte que deux classes puissent appeler leurs méthodes respectives?

    Par exemple:

    Liste.h
    class Liste
    {
        public:
            Liste();
            void addMembre(Membre *membre);
            QVector<Membre*> getMembres();
        private:
            QVector<Membre*> listeMembres;
    };
    


    Membre.h
    class Membre
    {
        public:
            Membre();
            void setListe(Liste *liste);
            bool isAlone();
        private:
            Liste *membreListe;
    };
    


    La méthode Liste::addMembre doit pouvoir faire appel a Membre::setListe.

    La méthode Membre::isAlone doit pouvoir faire appel a Liste:getMembres.

    Une simple ligne du style ...

    class Membre;
    


    ... Avant de déclarer la classe Liste et ses membres ne suffit plus, il me faut un moyen de préciser une partie des méthode de la classe Membre. C'est possible?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      6 août 2008 à 11:42:46

      Comme tu utilise des pointeurs, une déclaration anticipé de Membre devant la classe Liste et inclusion de Liste.h avant la classe Membre devrait marcher parfaitement bien.

      Après, dans tes fichiers cpp, il faut inclure les fichiers d'en tête qui contienne ce dont tu as besoin, donc Membre.h et Liste.h.
      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2008 à 13:22:51

        Merci pour ta réponse Davidbrcz,

        Si quelqu'un passe ici et ne comprend pas tout de suite (c'était mon cas), voilà l'exemple du dessus tel qu'il doit être écrit:

        Liste.h
        class Membre;
        
        class Liste
        {
            public:
                Liste();
                void addMembre(Membre *membre);
                QVector<Membre*> getMembres();
            private:
                QVector<Membre*> listeMembres;
        };
        


        Membre.h
        class Liste;
        
        class Membre
        {
            public:
                Membre();
                void setListe(Liste *liste);
                bool isAlone();
            private:
                Liste *membreListe;
        };
        


        Membre.cpp
        #include "Membre.h"
        #include "Liste.h"
        //...
        


        Liste.cpp
        #include "Liste.h"
        #include "Membre.h"
        //...
        


        C'est tout simple une fois écrit ... On commence par signaler l'existence de l'autre classe dans le header et on oublie pas de faire l'include dans le source. L'autre point qui me perturbait c'est pourquoi il est important de passer par des pointeurs, la encore je me sens idiot maintenant que j'y ai réfléchi un peu: Si les deux classes pouvaient se contenir mutuellement ces objets seraient de taille infinie ;)

        Bref, encore merci.
        • Partager sur Facebook
        • Partager sur Twitter

        [C++] inclusion mutuelle

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown