klassen sollen sich gegenseitig benutzen.



  • guten tag, folgende 2 klassen:

    class HeadQuater
    {
    public:

    Auto *A;
    void run();
    };

    #include "HeadQuater"
    class Auto
    {
    public:

    HeadQuater *Hq;
    void wähle();
    };

    in der funktion wähle() benutze ich die funktion von HeadQuater wie folgt:
    Hq->run();
    das funktioniert auch ohne probleme.

    in HeadQuater möchte ich jetzt gerne wähle() der klasse Auto benutzen. Also includiere ich #include "Auto" in der .h datei von HeadQuater. laut compiler schließen sich die klassen jetzt selbst ein. also der Aufruf A->wähle(); in der .cpp datei von HeadQuater funktioniert nicht.
    Das die Klassen nur einmal aufgerufen werden kann man laut internet hiermit:

    #ifndef MYHEADERNAME_H
    #define MYHEADERNAME_H

    //Hier das was in die Headerdatei kommt

    #endif

    umgehen. leider funktioniert das nicht.

    Also wie schaffe ich es, dass ich die methoden beider klassen in beiden klassen verwenden kann? danke euch 🙂



  • Mit einer Vorwärtsdeklaration.

    Du deklarierst die Klassen in den Headern, anstatt ihre Header einzubinden.
    Also anstatt in dem Header von HeadQuarter den Header von Auto einzubinden, schreibst du

    class Auto;
    

    Dann kannst du in den Sources, die beide Header problemlos einbinden können, beide Klassen benutzen.

    Beispiel:

    // A.h
    struct B; // struct B wird deklariert.
    
    struct A
    {
        B* b; // Ein opaker Zeiger, da der Typ hier nicht gebraucht wird kann er unvollständig sein
    
        A();
    };
    
    // B.h
    struct A;
    
    struct B
    {
        A* a;
    
        B();
    };
    
    // A.cc
    #include "A.h"
    #include "B.h"
    
    A::A():
        b( new B() )  // für den new-Operator muss der Typ (hier B) vollständig sein. Das ist allerdings durch das Einbinden des Headers kein Problem.
    {}
    
    // B.cc
    #include "A.h"
    #include "B.h"
    
    B::B():
        a( new A() ) 
    {}
    

    ~Keine Garantie - bin besoffen. SeppJ kontrolliert das.~ 👍



  • ...



  • Solche zirkulären Abhängigkeiten deuten idR auf Designfehler hin, insbesondere bei Anfängern. Bist du sicher, dass du die Abhängigkeiten so benötigst?


Anmelden zum Antworten