Klasse A ist memebr von KLasse B und Klasse B ist Member von Klasse A. Wie Compiliern?



  • class A;
    
    class B{
    B(A* a){}
    }
    
    class A{
    aLsit<B>
    }
    


  • boohaa! das ging ja übertrieben schnell! 😮
    nächste mal nehm ich code 😉

    ich wuste zwar erst nicht was forward-deklarationen sin, ist mir aber gelich klar geworden was gemint ist und was ich tun kann!

    vielen herzlichen Dank!! 😋

    D3CK



  • und Mitglied 😃

    bis dann!



  • was ist wenn A und B im konstruktor jewils den anderen brauchen?

    dann geht das nich mehr so einfach oder?

    class A{
    
     A(B *b){...}
    };
    
    class B{
    
    B(A *a) {..}
    };
    

    dann müsste man ja das über gegensetige gekapselte Header machen oder?

    wie macht der compiler das.. er kann dies ohne das nicht machen, und das nich ohne dies?



  • Solange nur der Zeiger gebraucht wird und nicht das Objekt selbst, genügen auch hier Forward-Deklarationen. Den Körper des Konstruktors muss man allerdings, wenn der Zeiger dort dereferenziert werden soll, aus der Klasse rausziehen und nach der Includierung des Headers der jew. anderen Klasse implementieren...

    // A.h
    class B;
    
    class A {
        A( B* ptr );
    };
    
    // B.h
    class A;
    
    class B {
        B( A* ptr );
    };
    
    // A.cpp
    #include "A.h"
    #include "B.h"
    
    A::A( B* ptr )
    {
        // machwas mit *ptr
    }
    
    // B.cpp analog
    


  • Die Frage ist nur wie man ein A anlegen will wenn man ein B dazu braucht was man wiederum nur anlegen kann wenn man schon ein A hat...



  • hustbaer schrieb:

    Die Frage ist nur wie man ein A anlegen will wenn man ein B dazu braucht was man wiederum nur anlegen kann wenn man schon ein A hat...

    Die Verbindung muss ja nicht besitzend sein.

    Beispiel:
    Eine Gruppe besitzt X Mitglieder. Und jedes Mitglied weiss zu welcher Gruppe es gehört.

    Oder aber:
    Mein Vater besitzt eine Familie (er ist quasi das oberhaupt oder was auch immer). In dieser Familie gibt es einen Sohn der selber Vater ist und eine Familie besitzt.

    Gibt durchaus so abstruse szenarien wo man soetwas braucht. dass sich nicht 2 objekte gegenseitig besitzen können ist klar - aber es geht hier ja nicht um objekte sondern klassen.



  • hustbaer schrieb:

    Die Frage ist nur wie man ein A anlegen will wenn man ein B dazu braucht was man wiederum nur anlegen kann wenn man schon ein A hat...

    ne andere sprache als c++ verwenden 😉



  • thordk schrieb:

    hustbaer schrieb:

    Die Frage ist nur wie man ein A anlegen will wenn man ein B dazu braucht was man wiederum nur anlegen kann wenn man schon ein A hat...

    ne andere sprache als c++ verwenden 😉

    geht in c++ genauso wie in jeder anderen sprachen.



  • @Shade Of Mine: ja, ist mir schon klar, ist dasselbe bei Bäumen, die haben auch Nodes die auf Nodes zeigen die auf Nodes zeigen die auf Nodes zeigen... und irgendwann ist halt Schluss.

    Das was du meinst sollte in jeder vernünftigen Sprache möglich sein.

    @thordk: Danke für dein äusserst schlaues Kommentar, bloss das was ich meinte ist in keiner Sprache möglich, da es eben überhaupt nicht möglich ist.


Anmelden zum Antworten