Dynamische Allokation gegenseitig verlinkter Klassen



  • Hey
    ich hab ein Problem mit folgendem Code:

    #include "B"
    class A
    {
        private:
            B *b;
        public:
            A(){b=new B(this)}
    };
    
    //////
    #include "A"
    class B
    {
        private:
            A *a;
        public:
            B(A *a){this->a=a;}
    };
    

    Hier würden sich ja beide Datein unendlich oft gegenseitig includieren, klar dass das nicht funktioniert. Ziel ist, dass Klasse A die Klasse B dynamisch erstellt und B somit auch "kennt", nur das B auch A kennen soll, um Methoden von A aufrufen zu können. Hat da jemand ne Idee für ne schöne Lösung, undynamisch ginge es ja, wenn man in der Main-Funktion beide Klassen erstellt und ihnen dann jeweils nen Zeiger aufs andere Objekt übergibt. ABer da gibts doch bestimmt ne bessere Lösung, oder?



  • class B;
    
    class A
    {
        private:
            B *b;
        public:
            A();
    };
    
    class B
    {
        private:
            A *a;
        public:
            B(A *a){this->a=a;}
    };
    
    A::A()
    {
      b = new B;
    }
    

    Feel free to divide this into three or more files.

    Für Dein eigentliches Problem gibt es womöglich eine bessere Lösung.



  • Klappt leider nicht.
    Folgende Fehler werden produziert:
    "forward decleration of 'struct B' "-im Header der Klasse A
    "invalid use of incomplete type 'struct B ' "-im Konstruktur von A



  • // A.h
    class B; 
    class A 
    { 
        private: 
            B *b; // ok B ist irgendwas, egal zeiger ist zeiger.
        public: 
            A(); 
    }; 
    
    // B.h
    class A;
    class B 
    { 
        private: 
            A *a; // ok A ist irgendwas, egal zeiger ist zeiger.
        public: 
            B(A *a);
    }; 
    
    // A.cpp
    #include "B.h"
    A::A() 
    { 
      b = new B; // ok, was ein B ist weiß ich jetzt aus B.h
    }
    


  • Ahh ok (: . Jetzt läufts auch, danke sehr 🙂


Log in to reply