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 declarationin caller.h
class threadclass; // Forward declarationin 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 declarationin caller.h
class threadclass; // Forward declarationin 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.