Linkerfehler bei Verwendung von TemplateFunktion
-
Hallo!
Ich habe innerhalb einer NICHT-Template Klasse folgende Funktion:
class Test { <...> public: template<typename T> bool test(T val); <...> };Definiert ist die Funktion dann wie folgt:
template<typename T> bool test(T val){ ... }Beim Compilieren erhalte ich den Fehler LNK2019 -> unresolved external symbol - und zwar genau dann wenn ich diese Klassenfunktion benutzen möchte:
Beispiel:
Test TestObj; int i = 10; TestObj.test<int>(10);Die Header sind alle richtig inkludiert... Eigentlich übergebe ich der Funktion nämlich ein Objekt und keinen primitiven Datentyp.
Hat jemand eine Vermutung was falsch sein könnte?
Vielen Dank!!
-
Templates mußt du in den Header-Dateien definieren, entweder inline oder außerhalb der Klasse. Alternativ kannst du auch am Ende der Header-Datei die Template-Implementierung(en) als eigene Datei einbinden:
class Test { public: template<typename T> bool test(T val); }; #include "Test.inl" // oder wie auch immer du sie nennst
-
Hi,
danke für deine Antwort.
Ich habe die Funktion nun außerhalb der Klasse in der Header-Datei implementiert,
erhalte jedoch immer noch den selben Linkerfehler.
Grüsse
-
Fehler gefunden!
Lag an der falschen Funktionsdefinition:
Richtig ist:
template<tympename T> bool <Klasse>::<FunktionsName>(T <ParameterName>,...){ ... }