Konflikt von Klassenreihenfolgen



  • Hallo,

    Ich habe etwas vereinfacht formuliert folgendes Problem:

    class A {
      B *p2B;
    };
    
    class B {
      A *p2A;
    };
    

    man müsste also immer die eine klasse vor der anderen deklarieren um die ganze geschichte zu compilieren.

    wie kann ich diesen konflikt auflösen??

    LG



  • Muss man nicht:

    class A; //google nach forwärtsdeklaration
    
    class B
    {
      A* pA;
    };
    
    class A
    {
      B b; //geht
      B* pB; //geht auch
    };
    

  • Mod

    Ein Zeiger ist immer ein vollständiger Typ, auch dann, wenn der Typ, auf den gezeigt wird, unvollständig ist (schließlich kannst du auch void* benutzen, ohne void zu definieren). Es genügt also eine Deklaration der jeweiligen Klasse:

    class B; // Deklaration
    
    class A { // Definition
      B *p2B; // B ist hier unvollständig, nicht aber B*
    };
    
    class B { // Definition
      A *p2A;
    };
    


  • Problem kommt erst wenn du in dem Fall aus A ein B Objekt erzeugst, bzw. in B ein A Objket erzeugst. Da mekerst de compiler, weil er in B den A Konstruktor nich kennt udn anders herum.

    Hatte mal so ein Problem:

    Habe dann 2 header Dateien A und B erstellst und sie gegenseitig includiert.. weis aber nich mehr ob funktioniert hat:)


Log in to reply