undefined reference to
-
Datei abstract.h: ######################################################### class abstractclass { public: /* constructor */ abstractclass(); /* destructor */ virtual ~abstractclass(); void run() { printf("Test\n"); } protected: virtual void Test() = 0; }; Datei concrete.h: ######################################################### #include "abstract.h" class concreteclass : public abstractclass { public: /* constructor */ concreteclass(); /* destructor */ ~concreteclass(); private: void Test(); }; Datei concrete.cpp: ######################################################### #include "concrete.h" concreteclass::concreteclass() { } concreteclass::~concreteclass() { } void concreteclass::Test() { // do something } Datei test.cpp: ######################################################### #include "concrete.h" ... void testfunction(){ concreteclass con; con.run(); } ...Fehlermeldung:
.so: undefined reference to
concreteclass::~concreteclass()' .so: undefined reference toconcreteclass::concreteclass()'Ich kann den Fehler leider nicht finden, hat da jemand vielleicht eine Idee?
Mir ist überhaupt nicht klar wo der Fehler liegt?Thx
-
Der Linker findet die angegebenen Funktionen nicht. Du hast vermutlich vergessen, die Objektdatei, die beim Compilieren von concreteclass.cpp herausgekommen ist, mit dem Linker zu übergeben.
Das Forum hat im Übrigen eine Suchfunktion, die du bemühen solltest, das Thema gabs schon geschätze 300 mal...
-
und wie mache ich das? Meine Entwicklungsumgebung ist Eclipse.
-
pumuckl schrieb:
Der Linker findet die angegebenen Funktionen nicht. Du hast vermutlich vergessen, die Objektdatei, die beim Compilieren von concreteclass.cpp herausgekommen ist, mit dem Linker zu übergeben.
Oder er hat die im Header angegeben, aber in der .cpp nicht implementiert. (Vllt. nur ein Schreibfehler?)
-
also lösen kann ich das Problem indem ich am Ende des Headerfiles das Cppfile include aber das ist nicht wirklich schön.
Was soll das denn?
Wie kann ich das besser machen?thx
-
die cpp im header einzubinden ist nicht die richtige Lösung. Ich hab im Eclipse noch kein C++ gemacht, aber vermutlich kannst du irgendwo in den Projekteinstellugnen festlegen, welche .cpp-Dateien dazugehören. Im Zweifel dürfte es auch für Eclipse eine genügend umfangreiche Dokumentation geben die dir erklärt wie ein Projekt mit mehreren Übersetzungseinheiten aufzuziehen ist.
franz schrieb:
Oder er hat die im Header angegeben, aber in der .cpp nicht implementiert. (Vllt. nur ein Schreibfehler?)
Doch hat er, steht in seinem Code oben mit drin

-
pumuckl schrieb:
franz schrieb:
Oder er hat die im Header angegeben, aber in der .cpp nicht implementiert. (Vllt. nur ein Schreibfehler?)
Doch hat er, steht in seinem Code oben mit drin

Whoopsie...
Entweder hat er das editiert, oder ich werd schon blind...
// edit
Unregistrierter...
Damit bin ich wohl blind