Howto? Klasse A kennt Klasse B - Klasse B kennt Klasse A



  • Bin ein newbie aber kenne ein paar termini! Ich benutze g++ unter linux. Ich hoffe dieser Thread ist an richtiger Stelle.

    Wie können in C++ zwei Klassen einander kennen? Oder anders ausgerdrückt: Wie ist folgender Code zum laufen zu bringen:

    class A {
      B *b;
    };
    
    class B {
      A *a;
    };
    

    (Ich habe die Klassen in seperaten Dateien mit jeweiliger Header-Datei)
    Wenn ich die Klasse B erst deklariere und nach Gebrauch definiere bzw. für Prototypen die entsprechenden Methoden mit Methoden-Rumpf include, gibt es Mecker, weil vermutlich die Deklaration der Klasse tatsächlich eine Definition darstellt und danach keine Redifiniton möglich scheint.

    Wenn ich das ganze mit '#>g++ -c ...' bearbeite und ich die Objekt-Dateien A.o und B.o erhalte, scheitert es hiernach mittels '#>ld A.o B.o' beiden Objekt-Dateien eine ausführbare Datei zu linken.

    Wo bzw. anhand welcher Stichworte finde ich entsprechende Informationen?



  • Stichwort: Vorwärtsdeklaration bzw. forward declaration

    class B; // <-- dies hier ist eine Vorwärtsdeklaration
    class A {
      B *b;
    };
    
    class B {
      A *a;
    };
    

    d.h. es wird nur der Name bekanntgegeben und die Definition ist irgendwo anders
    (besonders bei Aufteilung auf mehrere Header ist das nötig!)


Anmelden zum Antworten