error LNK2019, ich weiß nicht weiter
-
Hallo allerseits,
ich habe vor Kurzem mit C++ angefangen (unter MV C++ 2005 Express Edition) und sein gestern habe ich ein Problem zu dem ich einfach keine Lösung finde (auch nicht online). Es sieht folgendermaßen aus:
ich habe eine Klasse SimpleList in einer Header-Datei deklariert und die Methoden in einer Source-Datei definiert, dann versuche ich eine Instanz zu erzeugen, worauf aber dann der Compiler anfängt rumzumeckern. (SimpleList.h und SimpleList.cpp habe ich dem Projekt hinzugefügt)
#include "stdafx.h" #include "SimpleList.h" int _tmain(int argc, _TCHAR* argv[]) { SimpleList<string>* sl = new SimpleList<string>(); delete sl; getchar(); return 0; }HashTable_mit_neuer_Liste.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall SimpleList<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::~SimpleList<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??1?basic_string@DU?allocator@D@2@@std@@@@QAE@XZ)" in Funktion ""public: void * __thiscall SimpleList<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::`scalar deleting destructor'(unsigned int)" (??_G?basic_string@DU?allocator@D@2@@std@@@@QAEPAXI@Z)".
Ich weiß einfach nicht mehr weiter
, könnte mir bitte jemand weiter helfen, danke im Voraus!!!
-
Du kannst Templates nicht in Sourcefiles auslagern, da der Compiler sie dann bei ihrer Erzeugung nicht findet. Template bedeutet ja Vorlage, d.h. der Compiler erzeugt erst dann eine Klasse aus der Vorlage wenn Du sie instanzierst. Du musst die Methoden des Templates im Header SimpleList.h lassen.
-
Ah!!! Das hätte mir auch klar sein müssen, vielen Dank!!!

-
Alle Templates die ich habe, habe ich nun in den Headern, die Klassen habe ich auch mehrmals getestet und die laufen problemlos, nun habe ich das selbe Problem wieder und an den Templates kann es diesmal nicht liegen (denke ich zumindest, oder ich verstehe da etwas nicht). Ich kann die Klasse zwar problemlos kompilieren aber so bald ich versuche eine Instanz zu erzeugen gibt es wieder den selben Fehler, hier die Klasse:
Header:
#include <string> #include "Hashtable.h" #pragma hdrstop #pragma once #ifndef __TRANSFORMATIONSKNOTEN__ #define __TRANSFORMATIONSKNOTEN__ class SzeneManager; //#include "SzeneManager.h" #include "SpeicherbaresObjekt.h" #include "IDarstellbar.h" ... #endif __TRANSFORMATIONSKNOTEN__Source:
#include <iostream> #pragma hdrstop #include "TransformationsKnoten.h" ...weiß jemand darauf ne Antwort?

-
Also es ist jetzt so, dass wenn ich anstatt den Header zu Inkludieren, Source einbinde womit es auch keinen Fehler mehr gibt, aber sollte, dass nicht auch mit dem Header gehen ??? ich verstehe das nicht ganz, wieso.

-
Ich habe jetzt die Lösung, auch wenn ich nicht ganz nachvollziehen kann wieso es so sein muss, alles was ich machen musste war, den Header- und die Sourcedatei dem Projekt hinzuzufügen und in der Source “stdafx.h“ zu includieren, und schon läuft es aber wieso? K.a.
