Probleme mit Templates (Unresolved Symbol) [gelöst]



  • Hallo miteinander,

    aktuell kämpfe ich mit Templates, weil die nicht so wollen wie ich es will!
    Hier ein kurzes (gekürztes) Beispiel meines Codes.

    // Foo.hpp
    #pragma once
    
    template<typename _Ty>
    class Foo {
    private:
        _Ty bar;
    public:
        Foo();
        ~Foo();
    };
    
    // Foo.cpp
    #include "Foo.hpp"
    
    template<typename _Ty>
    Foo<_Ty>::Foo() {
        /* 42 */
    }
    
    // main.cpp
    #include "Foo.hpp"
    
    int main() {
        // ...
        Foo<int> *f = new Foo<int>;
        // ...
    }
    

    Beim Versuch das zu Compilieren bekomme ich von Visual Studio folgenden Fehler:

    error LNK2001: unresolved external symbol "public: __thiscall Foo<int>::Foo<int>(void)"

    Kann es sein, dass ich gerade nicht verstehe wie ich dies auslagern kann in die cpp-Files?



  • Christian Ivicevic schrieb:

    Kann es sein, dass ich gerade nicht verstehe wie ich dies auslagern kann in die cpp-Files?

    Mit Templates gar nicht - da muß der Compiler die Definition kennen, wenn er eine konkrete Instanziierung erzeugen will.
    Dazu findest du hier im Board genug Threads, die das genauer erklären.



  • Ich habe es schon. Ich sollte vielleicht demnächst zuerst in die FAQ schauen -.-"
    Hab einfach alles aus dem cpp File ins Header ans Ende gepackt.


Anmelden zum Antworten