Templates und Linker error
-
Hallo,
Erstmal hoffe ich, dass ich bei meinem Problem im Richtigen Forum poste.Mein Problem ist Folgendes:
eine Klasse mit Templates wird in eine eigene Datei mit Header erzeugt
Test.h:
template<class T> class Test { public: Test(); ~Test(); //... };Test.cpp:
#include "test.h" template<class T> Test<T>::Test() { } Test<T>::~Test() { }Als nächstes wird die Klasse in einer anderen Datei aufgerufen
andereDatei.cpp:
#include "test.h" int main() { Test<int> *t (new Test<int>()); return 0; }Das Programm lässt sich fehlerfrei übersetzen ( sollte es zumindest
), aber der Linker bricht mir immer mit einer Meldung a la:In function
main': main.cpp:(.text+0x20): undefined reference toTest<int>::Test()'
collect2: ld returned 1 exit statusWeis jemand was den Linker error verursacht?
-
Templates *müssen* in der Header-Datei implementiert werden!
Sonderfall sind spezialisierte Templates... das hast Du hier aber nicht...
-
Ist mir auch schon aufgefallen, dass es geht wenn ich alles in eine Header Datei Packe.
Was mich aber interessiert ist, warum und vor allem warum gibt der Linker eine Fehlermeldung aus.
-
Der Linker sucht nach einer Methode "Test<int>::Test()". Siehst Du die bei Dir irgendwo *implementiert*?
Wenn Du in Deiner cpp-Datei ein:
template<> Test<int>::Test() { } template<> Test<int>::~Test() { }Schreiben würdest, dann geht es... das ist dann ein "spezialisiertes Template"...
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum Compiler- und IDE-Forum in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.