#include problem
-
Hi, ich hab leider ein kleines Problem mit includes.
Ich habe zwei Klassen die miteinander interagieren sollen - also jede auch auf die andere zugreifen. Sobald ich aber im header auch die andere include gibt es compile fehler.Um zu zeigen was ich meine hier ein mini test-Programm das genau diesen Fehler erzeugt...
main.cpp
#include <iostream> #include "test1.h" #include "test2.h" int main() { std::cout << "Hello world!" << std::endl; Test1 *test = new Test1(new Test2()); return 0; }test1.h
#ifndef TEST1_H #define TEST1_H #include "test1.h" #include "test2.h" class Test1 { public: Test1(Test2 *test); virtual ~Test1(); }; #endif // TEST1_Htest2.h
#ifndef TEST2_H #define TEST2_H #include "test1.h" class Test2 { public: Test2(); virtual ~Test2(); private: Test1 *m_test; }; #endif // TEST2_HCompile log:
Compiler : GNU GCC Compiler (called directly) Directory : D:\projects\ClassTest\ -------------------------------------------------------------------------------- Switching to target: default Compiling: test1.cpp In file included from test1.h:4, from test1.cpp:1: test2.h:12: error: ISO C++ forbids declaration of `Test1' with no type test2.h:12: error: expected `;' before '*' token Process terminated with status 1 (0 minutes, 0 seconds)Ich bin leider echt am verzweifeln.

Übrigens, wenn ich das "Test1 *m_test;" aus der test2.h weglasse hängt er sich mit der meldung
test1.h:9: error: expected `)' before '*' tokenin der test1.h auf, so lange bis ich aus der test2.h den #include "test1.h" weg mache - dann geht der compile ohne Probleme...
Würde mich echt freuen, wenn mir jemand helfen kann!
Vielen Dank im Vorraus!
-BBB
-
Hi,
du bist auf der Suche nach forward declaration.
Nimm das include test1.h aus test2.h raus und ersetze es durch ein
class Test1, dann klappt's auch mit g++.Gruessle
-
Es funktioniert! Vielen vielen Dank!

-
BigBadaBoom schrieb:
test1.h
#ifndef TEST1_H #define TEST1_H #include "test1.h" #include "test2.h" class Test1 { public: Test1(Test2 *test); virtual ~Test1(); }; #endif // TEST1_HHm, ich versteh nicht, warum die test1.h in die test1.h inkludierst. Ist das nicht überflüssig? oder soll das die test1.cpp sein?
Sorry, wenn ich hier was falsch versteh, bin noch Anfänger und wüsste gern, warum das "doppelt-gemoppelt" ist.
-
Vermutlich, weil er versucht hat, es "zum Laufen zu kriegen".
Das ist natürlich wirklich überflüssig. Gesucht war die Vorwärtsdeklaration, also eine Methode, dem Compiler eine Klasse bekannt zu machen, ohne die Klasse zu implementieren.
class Test1; class Test2 { ... zeug }heißt also:
"Achtung Compiler. Es gibt eine Klasse Test1, die kommt aber später. Rechne also damit, daß ich Test1 in Test2 verwende, und kümmere dich später darum, daß dort die irgendwo anders implementierte Klasse Test1 verwendet wird.".
-
Yep, war mein fehler, hab nur schnell ein paar kleine Klassen zusammen gekrizelt um das Problem zu demonstrieren - hab wohl nicht so ganz drauf geachtet, was wo included wurde solange ich den gleichen Fehler produziert habe.
