Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une classe qui dépend d'une autre...

...qui dépend elle même de la première.

Sujet résolu
    1 octobre 2008 à 17:57:31

    Bonjour,
    J'ai un problème en C++, l'exemple parle mieux que les mots :

    main.hpp
    #if not defined MAIN_HPP
    #define MAIN_HPP
    
    #include "truc.hpp"
    
    class Main
    {
    protected:
        Truc m_truc;
    };
    #endif
    


    truc.hpp
    #if not defined TRUC_HPP
    #define TRUC_HPP
    
    #include "main.hpp"
    
    class Truc
    {
    protected:
        Main m_main;
    };
    
    #endif
    


    Et, bien sur, le fichier main.hpp est inclus dans main.cpp.

    L'erreur est la suivante :
    truc.hpp:9: erreur: «Main» does not name a type


    Je ne sais pas comment résoudre ce cercle vicieux... pouvez vous ?
    Merci d'avance !

    PS: Une solution serait d'employer un pointeur void dans l'une des classe (la classe Truc par exemple), l'initialiser grâce à this dans la classe Main puis de le caster à chaque utilisation... mais je voudrais savoir si il n'y aurait pas une méthode plus simple.
    • Partager sur Facebook
    • Partager sur Twitter
      1 octobre 2008 à 18:06:48

      En regardant ton code, tu essaies de mettre "main" dans "truc", qui lui meme contient "main"
      C'est infini : un peu comme des poupées russes qui iraient jusqu'a l'infini, tu vois ? :)

      par contre, ce que tu peux faire, c'est un POINTEUR vers l'autre classe, et des pointeurs dans les 2 sens, simplement en faisant une déclaration auiparavant.

      class truc;  // déclaration
      
      class machin
      {
         truc* t;
      };
      
      class truc
      {
        machin* m;
      }
      


      Je pense tout de meme que tu as un probleme de conception.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        1 octobre 2008 à 18:18:10

        Dans la "réalité", j'utilise bien des pointeurs, c'était juste pour "simplifier" l'exemple. Mais, je reconnais que cet exemple est irréalisable.
        Mon but est en fait de modifier les propriétés d'une wxFrame depuis un wxPanel (son fils) dans wxWidgets.

        Je ne savais pas que l'on pouvait pré-définir une classe. En tout cas ça marche.
        Merci ! :p
        • Partager sur Facebook
        • Partager sur Twitter
          1 octobre 2008 à 19:26:17

          On appelle ça "déclarer", ou encore une "déclaration anticipée" (/"forward declaration"). Et c'est un classique de la FAQ C++ de développez.
          • Partager sur Facebook
          • Partager sur Twitter
          C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

          Une classe qui dépend d'une autre...

          × 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