Anfängerfrage: Klassenüberschneidungen



  • Hallo.

    Ich bin recht neu in C++ und bin nun auf ein Problem gestoßen, welches sicherlich eine ganz einfache Lösung hat - nur weiß ich sie nicht. Da ich den Fachbegriff dafür nicht kenne, fällt es schwierig mit der Suchfunktion in einem C++ Forum nach den Begriffen "Klasse" und "Zeiger" zu suchen. 😉

    Also, mal stark vereinfacht:

    Ich habe die beiden Klassen

    class A_Objekt
    {
        B_Objekt B;
    };
    
    class B_Objekt
    {
        A_Objekt* p_A;
    };
    

    Ich möchte also ein Objekt der Klasse A_Objekt haben, welches ein Objekt der Klasse B_Objekt enthält. Dieses B_Objekt soll seinerseits wieder einen Zeiger auf die "Mutterklasse" speichern.

    Jetzt meckert aber mein Compiler (VC++.net) aber rum, dass er A_Objekt nicht lesen kann, da B_Objekt noch nicht deklariert ist und wenn ich die Reihenfolge tausche, dass er B_Objekt nicht lesen kann, weil A_Objekt noch nicht deklariert ist.

    Wie kann ich das umgehen?



  • Hallo,
    was du suchst heisst Vorwärtsdeklaration.

    Ich würde die Klassen in umgekehrter Reihenfolge definieren und dann ganz obe vorwärts deklarieren.

    class A_Object;  // vorwärtsdeklaration
    
    class B_Objekt
    {
        A_Objekt* p_A;
    };
    
    class A_Objekt
    {
        B_Objekt B;
    };
    

    [edit] hehe japp zu langsam 😉 [/edit]



  • Setze davor:

    class B_Object;
    

    das ist eine Vorwärtsdeklaration, somit weiß der Compiler, dass die Klasse B_Object noch definiert wird
    edit: diesmal zu langsam 😃



  • Habt Dank. 🙂


Anmelden zum Antworten