circular refererence



  • Hallo!

    Ich habe das Problem, dass zwei Klassen deklariert in verschiedenen header-Dateien Referenzen auf jeweils die andere enthalten und dazu noch auf sie zugreifen.
    Am Beispiel:
    a.hh

    #ifndef A_HH
    #define A_HH
    #include "b.hh"
    class A {
    public:
      void foo(B* b);
      void bar();
    };
    #endif
    

    a.cc

    #include "a.hh"
    void A::foo(B* b){
      b->foo();
    }
    

    b.hh

    #ifndef B_HH
    #define B_HH
    #include "a.hh"
    class B {
    public:
      void foo(A* a);
      void bar();
    };
    #endif
    

    b.cc

    #include "b.hh"
    void B::foo(A* a) {
      a->bar();
    }
    void B::bar() {}
    

    Dass der Compiler Probleme bekommt, ist verstaendlich.
    Wie loest man solche Probleme generell? Oder ist sowas nur schlechtes Klassendesign, bei der der C++-Veteran die Nase ruempft?

    Fuer Hilfe bin ich dankbar,
    Florian



  • Stichwort: forward-Deklaration. Müsste auch in der FAQ was zu stehen.

    Oder ist sowas nur schlechtes Klassendesign, bei der der C++-Veteran die Nase ruempft?

    Ich denke schon, dass zwei Klassen sich mal gegenseitigbrauchen können. Natürlich sollte man Abhängigkeiten immer so gering wie möglich halten.



  • Ich glaub das hilft mir weiter, danke.



  • Wie löst man sowas eigentlich bei Template-Klassen? Da hat man ja keine cpp-Dateien... 🙄



  • ich hatte das problem einmal mit templates, und ich konnte es über nen zusätzlichen template parameter lösen,das problem war dann nur, den template parameter in der doku zu erklären 🙄



  • gibts für templates nicht extra "export" ,
    damit man sie in cpp und h dateien aufteilen kann .



  • Hi truebool,

    das Schlüsselwort "export" unterstützt zur Zeit aber kaum ein Compiler.

    mfg JJ



  • ja das kann sein ich weiss ja nicht welchen "Bennis" benutzt und hab mich einfach mal an meyers gehalten denn bei mir ich weiss nicht mehr mit welchem compiler hats mir mal geholfen .. dennoch danke für die info



  • Hi truebool,

    wie siehts denn mit deinem eigenen Compiler aus. 🙂 😃 😉

    mfg JJ



  • lach naja ich hab mal geguggt und ich muss sagen das du recht hast
    weder borland 6 noch msvs noch devcpp wollen export ..
    naja borland sagt aber dasses inner nächsten version unterstützt wird..
    wie gesagt auf irgeneinem anderen compiler ohne ide hatte ich das mal auf meinem unix compiliert naja ist wohl aber nicht so wichtig da ich eingestehen muss dasses wohl eine seltenheit ist



  • der comeau soll im moment der einzige compiler sein, der das unterstützt...deshalb halt ich export atm als problemlösung noch ganz raus...

    wobei mir einfällt: wenn heutzutage noch kaum/keine compiler den standard komplett unterstützen, wieso macht man dann bereits einen neuen?


Anmelden zum Antworten