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>,...){
    ...
    }
    

Anmelden zum Antworten