Übergabe eigener Instanz an instantiierte Klasse



  • Hallo zusammen,

    Ich habe mal, da ich neu von Java komme (habe allerdings schon etwas mit C++ gearbeitet) etwas mit den C++-Klassen herumexperimentiert. Nun habe ich aber bereits ein Problem:
    Ich habe da also 2 Klassen, die - abgesehen vom Namen - identisch sind und auch jeweils den Header der anderen Klasse inkludiert haben.
    Nun habe ich beiden Klassen noch eine Funktion hinzugefügt, mit der eine Instanz der jeweils anderen Klasse übergeben werden kann (ein Zeiger darauf).
    Bei der einen der beiden Klassen wird das ohne zu meckern kompiliert, bei der anderen kommt eine Meldung dass der Datentyp (die eine Klasse) nicht definiert sei. Wieso das? Und insbesondere geschieht dies zufällig - ich habe lediglich diese beiden Klassen und eine leere main.cpp. Ausserdem ist bei beiden Klassen nur eine leer-Implementierung vorhanden.
    Wie kann ich es denn sonst lösen, dass eine Klasse eine andere Klasse instantiiert und dieser eine Instanz von sich selbst übergeben kann? Evtl. virtuelle Klassen?



  • Häufig gemachter Fehler. Lies mal das hier.

    Im übrigen würde ich dir empfehlen ein Buch über C++ zu kaufen oder ein gutes Online Buch zu lesen. Vor allem als Umsteiger verhält es sich in C++ nicht immer ganz so, wie man es vermutet, oder man es gewohnt ist.



  • Dein Problem ist wahrscheinlich die zirkuläre Einbindung der Header Dateien, d.h. KlasseA.h inkludiert KlasseB.h und KlasseB.h inkludiert KlasseA.h. Das lässt sich durch sogenanntes forward declaration lösen:

    KlasseA.h

    // forward declaration
    class KlasseB;
    
    class KlasseA
    {
       ...
       KlasseB* KlasseB_;
       ...
    };
    

    und

    KlasseB.h

    // forward declaration
    class KlasseA;
    
    class KlasseB
    {
       ...
       KlasseA* KlasseA_;
       ...
    };
    


  • Danke! Das habe ich gesucht.
    Ich habe schon C++-Bücher, aber die habe ich gerade nicht zur Hand.


Anmelden zum Antworten