Vorwärtsdeklaration



  • Wenn ich mit einer Vorwärtsdeklaration eine Klasse einbinde, zB CMyClass, in die Headerdatei einer anderen Klasse, dann geht bei mir:
    CMyClass* ZeigerVariable;
    aber nicht:
    CMyClass Variable;
    Der Compiler meckert: "Unbekannte Klasse CMyClass." oder ähnlich !
    Allerdings wenn es sich um eine Dialog-Klasse, zB CMyDialog handelt, geht es:
    CMyDialog dlg;
    dlg.DoModal(); // usw ..
    Kann mir das jemand erklären ?



  • Bei einer Vorwärtsdeklaration sagst du dem Compiler, dass es diesen Typ gibt, jedoch noch keine konkrete Definition. Da Zeiger unabhängig von ihren Typen immer gleich groß sind (das sie ja nur eine Adresse, dh. Zahl enthalten), reicht so eine Deklaration schon aus. Willst du allerdings diesen Zeiger dereferenzieren, muss der Compiler wissen, was dessen Member etc. oder die Größe des Typs ist.
    Ähnlich verhält es sich mit der Instanzierung: Der Compiler muss den Konstruktor/Destruktor etc. sowie die Anzahl an Bytes kennen, die dieser Typ in Anspruch nimmt.
    Dein CMyDialog wurde wahrscheinlich bereits irgendwo unbemerkt von dir definiert bzw. dessen Definition durch #include reingeschmuggelt.



  • Vielen Dank roflo !


Log in to reply