Forward Deklaration



  • hi
    kan mir mal jemand genau u einfach (viell mit einfach klassenbsp.) erklären warum,wie man forward deklarationen braucht? und warum das includieren der jeweiligen header dateien nicht reicht?

    thx



  • // a.h
    class A
    {
      B* pb;
    };
    
    //b.h
    class B
    {
      A*pa;
    };
    

    Okay, das kompiliert nicht. Wir könnten dann einfach jeweils den anderen Header mit einbinden am Anfang. Aber dann würden wir ne unendliche Rekursion machen. Fakt ist: Wenn ich a einbinden möchte muß b schon eingebunden sein, aber das geht nur wenn a schon eingebungen ist...

    Ausweg: Forward Deklaration. Einfach ein class A; bzw. class B; in b.h bzw. a.h und die Sache funktioniert.

    MfG jester



  • Außerdem solltest du die Forwarddeklaration vorziehen wenn es möglich ist, weil es dann wesentlich schneller kompiliert!



  • Und wie mache ich da ganze ohne Zeiger?
    Ich habe folgendes versucht

    class a;
    class b;
    
    class a
    {
    	b m_b;
    };
    
    class b
    {
    	a m_a;
    };
    

    und bekomme die Fehlermeldung:
    'm_b' verwendet undefiniertes class 'b'

    MfG



  • Das funktioniert natürlich nicht, du hasst die klasse ja erst deklariert und noch nicht definiert (oder ist umgekehrt?). wenn man "b m_b;" aufruft, wird ja der Standard Konstruktor aufgerufen, nur gibt es den noch nicht.



  • ohne zeiger klappt es garnicht.

    denn:

    A beinhaltet ein B welches ein A beinhaltet. Doch A beinhaltet ein B, was wiederrum ein A beinhaltet und dies beinhaltet ein B, etc.

    du verstehst?


Anmelden zum Antworten