Programmieren - alles kontrollieren 4.937 Themen, 20.655 Beiträge

Templates in VC++

Dreamforger / 4 Antworten / Flachansicht Nickles

Hallo zusammen,

heute hab ich mal wieder ein Problem. Ich möchte eine Template class schreiben, bekomme aber immer LNK 2001 Fehler (Unresolved Symbol) beim Build von Container Test.cpp (siehe unten)

Ich habe das Problem mal reduziert auf folgendes


---------Container.h-----------
template
class Container
{
public:
void Set(T item);
T Get();
Container();
virtual ~Container();
private:
T item;
};

----------Container.cpp----------
#include "Container.h"

template
Container::Container() {}

template
Container::~Container() {}

template
T Container::Get(){
return item;
}

template
void Container::Set(T item) {
this->item = item;
}

---------Container Test.cpp-----------
#include "Container.h"
#include
int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cmd, int cmdshow)
Container mc;
mc.Set(100);
int v = mc.Get();
return -1;
}


Ich schätze das es irgendwie damit zusammenhängt das Templates erst instantiiert werden, wenn die Funktionen aufgerufen werden und innerhalb der Container.* werden die Funktionen nicht explizit aufgerufen.

Was muss ich hinzufügen/ändern um den Linker glücklich zu machen?

Vielen Dank
Dreamforger

PS. wie bringt man bitte HTML dazu Begriffe in Spitzklammern z.B #include nicht zu parsen? Ich mache immer blanks, bin damit aber nicht glücklich. Gibt es eine Escape-sequence für Spitzklammern u.ä?

PPS ... und kann man den Text in pre ... /pre Bereichen größer machen? Also nicht im Browser, sondern im Code.

bei Antwort benachrichtigen
Dreamforger Nachtrag zu: „Templates in VC++“
Optionen

Ok, hab's selbst gefunden:

Templates darf man nicht in .h und .cpp Dateien aufteilen. Deklaration und Implementation müssen in derselben datei stehen. Ich werd mich nie an die Dateigrenzen von C gewöhnen...

Bleiben noch die beiden HTML Fragen offen

bei Antwort benachrichtigen