Template und unresolved external symbol



  • Hallo,

    also, ich muss sagen, dass ich bisher noch nie mit Templates gearbeitet habe. Daher wollte ich mich damit jetzt etwas mehr beschäftigen, stoße aber schon jetzt an meine Grenzen.

    Zu meinem Vorhaben:
    Ich möchte einen Stack mittels einer Templateklasse aufstellen. An sich bin ich auch schon fertig, nur der Linker pfuscht mir immer dazwischen. Möchte ich das Projekt ausführen, wird tadellos kompiliert, bekomme aber den Linkerfehler
    error LNK2019: unresolved external symbol "public: __thiscall stack<int>::stack<int>(void)" (??0?$stack@H@@QAE@XZ) referenced in function _main
    Ich habe schon alles mögliche ausprobiert, aber immer wieder das gleiche. Und daher suche ich nun hier Hilfe.

    Ich habe die Suchfunktion benutzt, aber nichts brauchbares gesehen - vielleicht habe ich es ja übersehen 🙂 - und auch aus dem Tutorial werde ich nicht schlau.

    Hier mal der Code aus "Stack.hpp"

    template<typename T>
    class stack
    {
    public:
    
    	stack ();
    
    	// ...
    
    private:
    
    	node<T> * p;
    };
    

    node benutzt auch die Templateklasse.
    Ich habe es mal etwas gekürzt 🙂
    Und hier noch "Stack.cpp", auch in sehr stark gekürzter Version

    #include "Stack.hpp"
    
    template<typename T>
    stack<T>::stack () : p (NULL)
    {}
    

    Syntaxfehler gibt es da keine. Benutzt main () keine Elemente aus der Klasse, funktioniert das Programm auch, aber wenn ich beispielsweise

    int main (int argc, char * argv [])
    {
    	stack<int> meinStack;
    
    	return 0;
    }
    

    mache, gibt es wie oben gesagt den Linkerfehler.

    Ich hoffe mal, dass ich mich deutlich genug ausgedrückt habe und mir jemand bei dem Problem helfen und sagen kann, was ich falsch mache.

    MfG
    plusmann



  • Die Suchfunktion ist kaputt, stimmt, aber dafür gibt's hier 'ne FAQ 😉



  • Hallo plusman,

    Du kannst die Template-Implementierung nicht in ein eigenes CPP packen, das dann beim Übersetzen von main bzw. dem Anwender des Templates nicht dabei ist.
    Die Template-Implementierung muss mit in das Template-H-File.

    Gruß
    Werner



  • Nagut, ich muss wohl endlich einsehen, dass ich mir vorher auch die Sachen richtig durchlesen sollte 🙂

    Vielen Dank.

    MfG
    plusman



  • Werner Salomon schrieb:

    Die Template-Implementierung muss mit in das Template-H-File.

    Also bitte. Das Template-HPP-File! 😉


Anmelden zum Antworten