klassentemplate -> Nichtaufgeloestes externes Symbol
-
also, ich bin gerade ein bissel am coden und wollte eine von mir geschriebene listenverwaltungsklasse in ein template umbwandeln, um sie flexiebler zu machen. das ist mein 1. template und ich komme ein einer stelle einfach nicht weiter.
hier mal ein paar codeschnipsel:
die deklarierung in der header-datei:
template <class T> class MyList { (...) public: bool pushFront (T); (...) };
die implementirerung von pushFront:
template <class T> bool MyList<T>::pushFront (T value) { Node* temp = new Node; temp -> info = value; if (first == NULL) { first = temp; temp -> next = NULL; } else { temp -> next = first; first = temp; } return true; }
und in der main steht dann:
MyList<string> liste; liste.pushFront ("fds");
ich habe das so ein 2 büchern gefunden, aber bei mit funktioniert das einfach nicht. die fehlermeldung lautet:
Kompilierung läuft... myList.cpp Linker-Vorgang läuft... main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: bool __thiscall MyList<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::pushFront(class std::basic_string<char,struct std::char_traits<cha r>,class std::allocator<char> >)" (?pushFront@?$MyList@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) Debug/test.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe.
kann mir jedamd sagen, was ich falsch gemacht habe?
-
Implementierungen von Template-Funktionen müssen in der Header-Datei stehen, sage ich dazu nur.
Logisch ist es auch, da es sich nicht um eine Definition, sondern eine Deklaration der Funktion handelt. Denn definiert wird sie erst beim Spezialisieren des Templates.
MfG MAV
EDIT: Zeichensetzungsfehler (Komma)
EDIT2: Hatte Kommasetzungsfehler geschrieben bei ,,EDIT:'' (Wort gibt es nicht)
-
oh cool, es funktioniert. vielen dank. das ist aus meinen quellen nicht hervorgegangen.
mfg,