Include über Kreuz



  • Ja, wäre wohl schlauer gewesen 😉



  • Also ich hab jetzt:

    caller.h
    #include "threadClass.h"
    Vorwärtsdeklaration: class threadClass;

    caller.cpp
    #include "caller.h"
    #include "threadClass.h"

    threadClass.h
    #include "caller.h"

    threadClass.cpp
    #include "threadClass.h"
    #include "caller.h"

    Ergebnis:

    1>Kompilieren...
    1>caller.cpp
    1>...\threadstandalone\threadclass.h(10) : error C2061: Syntaxfehler: Bezeichner 'caller'
    1>...\threadstandalone\threadclass.h(23) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    1>...\threadstandalone\threadclass.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>...\threadstandalone\threadclass.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>threadClass.cpp
    1>Code wird generiert...
    1>threadStandalone - 4 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • hey,

    Wenn du threadClass als vorwärtsdekleration hast, darfst/musst du es nicht mehr includieren in der h-Datei.
    Wenn du caller in der threadClass.h includierst, brauchst du es nicht mehr in der threadClass.cpp zu includiern.



  • So sollte es gehen:

    in threadclass.h:
    class caller; // Forward declaration

    in caller.h
    class threadclass; // Forward declaration

    in threadclass.cpp
    #include "caller.h"

    in caller.cpp
    #include "threadclass.h"



  • Ich verweis immer gerne hier hin:
    Definitionen und Deklarationen in C++



  • Source2702 schrieb:

    So sollte es gehen:

    in threadclass.h:
    class caller; // Forward declaration

    in caller.h
    class threadclass; // Forward declaration

    in threadclass.cpp
    #include "caller.h"

    in caller.cpp
    #include "threadclass.h"

    Nein, geht auch nicht...

    1>------ Erstellen gestartet: Projekt: threadStandalone, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>caller.cpp
    1>...\threadstandalone\threadstandalone\caller.cpp(3) : error C2027: Verwendung des undefinierten Typs "caller"
    1> ...\threadstandalone\threadclass.h(6): Siehe Deklaration von 'caller'
    1>...\threadstandalone\caller.cpp(3) : error C2062: 'int'-Typ unerwartet
    1>...\threadstandalone\caller.cpp(4) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>...\threadstandalone\caller.cpp(4) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    1>...\threadstandalone\caller.cpp(8) : error C2027: Verwendung des undefinierten Typs "caller"

    ...

    1>Code wird generiert...
    1>Kompilieren...
    1>main.cpp
    1>Code wird generiert...
    1>threadStandalone - 61 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • caller.h hast aber in caller.cpp schon inkludiert, oder?



  • Wollte ich gerade schreiben, da lag der letzte Fehler.

    Jetzt klappt's, danke sehr.



  • So, nochmal für alle, die diesen Thread in der Zukunft besuchen und die endgültige Lösung wissen wollen:

    // threadClass.h
    class caller;
    
    // caller.h
    class threadClass;
    
    // threadClass.cpp
    #include "caller.h"
    #include "threadClass.h"
    
    // caller.cpp
    #include "threadClass.h"
    #include "caller.h"
    

    So läuft's bei mir jedenfalls, mit MS Visual Studio 2008.

    Nochmal vielen Dank an alle Helfer!



  • Äusserst merkwürdiges Konstrukt. Lies doch meinen verlinkten Artikel durch und probier das erneut. Es kann nicht sein, dass man von aussen solche Vorwärtsdeklarationen machen muss.


Anmelden zum Antworten