Header-Dateien



  • Hallo,

    ich habe mal eine Frage die zuächst etwas trivial klingt:
    In allen meinen jahrelangen Projekten habe ich wohl einen Denkfehler hinsichtlich einbinden von Headerdateien in VCc-Projekten gehabt... Oder?
    Mein Problem: Ich habe einen Democode bekommen, der funktioniert, diesen Code wollte in Teilen in ein eigenes Projekt integrieren, was aber zu Fehlern führt.

    Democode
    4 Dateien
    dialog.h
    dialog.cpp
    tab.h
    tab.cpp

    dialog.h und tab.h sind included in dialog.cpp
    Das Objekt in tab.h wird in dialog.h abgeleitet um es innerhalb des Objektes vom dialog zu verwenden.
    Wenn ich das in einem eingenen Projekt machen würde, wirft der Compiler den Fehler C2146 da er den Typ nicht kennt. In dem Democode funktioniert das einwandfrei und lässt sich von meinem Compiler kompilieren. Von der Logik her würde ich sagen, kann der Compiler den Typ in dialog.h nicht kennen. Oder wie? Was haben die im Demoprojekt gemacht, dass es trotzdem klappt?

    Gruss
    Achim



  • Ich kann nur raten, solange du den Code nicht zeigst:

    Forward deklaration der Klasse? Und Include in der .CPP-Datei?



  • Den Code zu zeigen ist etwas zu umfangreich. Aber das Beispiel ist einfach:
    http://www.codeproject.com/KB/tabs/SimpleTab.aspx
    Ich habe die Includes in den entsprechenden CPP Dateien.
    tab.h in tab.cpp
    tab.h und dialog.h in dialog.cpp

    Forward Deklaration könnte sein, habe ich aber nicht entdeckt.

    Gruss
    Achim


  • Mod

    Wenn die Klasse in dialog.h von tab.h abgeleitet ist, muss tab.h auch in dialog.h included werden.



  • Richtig Martin!

    aber warum klappt das im Democode ohne den entsprechenden Include?


  • Mod

    ARoh schrieb:

    Richtig Martin!

    aber warum klappt das im Democode ohne den entsprechenden Include?

    Weil tab.h vor dialog.h included wurde...


  • Mod

    ARoh schrieb:

    Richtig Martin!

    aber warum klappt das im Democode ohne den entsprechenden Include?

    Weil evtl. tab.h vor dialog.h included wurde.


Anmelden zum Antworten