Template einer Klasse

Hallo an alle!

Ich lerne im Moment C++ und versuche ein Klassen-Template zu implementieren. Grundlage für mich ist das Buch von Willms „Einstieg in Visual C++ 2008“ und Visual Studio 2008 Express Edition.

Ich habe eine einfache Klasse „vec“ (bestehend aus vec.h und vec.cpp) geschrieben und kompiliert: Keine Probleme.
Darauf hin versuchte ich aus der Klasse ein Template zu machen. Gemacht habe ich es in dem ich in der vec.h das „template“ vorgesetzt habe und in vec.h als auch vec.cpp den Datentypen durch „T“ ersetzt habe.
Der Kompiler meldet mehrere Fehler.

Erst als ich die Definition der Klasse (nur aus dem Konstruktor und Destruktor bestehend) in die vec.h verlagert hatte, konnte ich dies kompilieren und verwenden.

Ist es grundsätzlich möglich, dass ein Template aus einer Deklarationsdatei und Programmdatei besteht, nur habe ich bei der Umwandlung der Klasse zu einem Template etwas falsch gemacht? Oder ist das nicht möglich?

Vielen Dank für eure Antworten.
Vitali

Hi Vitali,

Ist es grundsätzlich möglich, dass ein Template aus einer
Deklarationsdatei und Programmdatei besteht, nur habe ich bei
der Umwandlung der Klasse zu einem Template etwas falsch
gemacht? Oder ist das nicht möglich?

ja, es gibt Compiler, die das vollstaendig erlauben. Diese Compiler müssen dafuer ein Repository verwalten und sind eher rar. Selbst die Option -frepo vom g++ funktioniert nicht wirklich so wie man es sich erwartet und das export wurde im neuen C++ Standard entfernt (es wurde seit 03 sowieso nur von Comeau und icc implementiert).

Wenn man doch .h und .cpp haben moechte und du die folgenden Dateien hast

vec.h

template
 class Vector
 {
 // ... 
 void resize(int n);
 };

vec.cpp

#include "vec.h"

// ...
template
 Vector::resize(int n)
 {
 }

und ein main.cpp mit

#include "vec.h"

int main()
{
 Vector v;
 v.resize(10);
}

dann wirst du oft nur dann keine Linkfehler bekommen, wenn du eine Datei

vec_impl.cpp dazwischen schaltest mit dem Inhalt

#include "vec.cpp" //;
template class Vector;
// ...

Gruss
n.

Danke
Norsemanna,

danke für die Beantwortung der Frage!