PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit template-funktionen



Camel69
20-05-2003, 15:38
in liste.h steht folgendes (auszug):

template<class T> class CListe
{
void Insert();
};

wenn ich die funktion Insert nicht in der header-datei implentiere, sondern ordentlich in der liste.cpp (bei der kompilierung der liste.cpp kommt es zu keinem fehler!), dann kommt es zu problemen, wenn ich in der main-funktion des programms folgendes ausführe:

CListe<int> liste;
liste.Insert();

Fehler: main.cpp: undefined reference to `CListe<int>::Insert()'

aber ich hab sie doch in der liste.cpp implentiert:
template<class T> void CListe<T>::Insert() {}

anda_skoa
20-05-2003, 17:26
Original geschrieben von Camel69
wenn ich die funktion Insert nicht in der header-datei implentiere, sondern ordentlich in der liste.cpp (bei der kompilierung der liste.cpp kommt es zu keinem fehler!), dann kommt es zu problemen

Bei Templates ist das ein Sonderfall.
Nur wenige Compiler unterstützen das auslagern der Template Implementation, weil sie ansich erst am Ort der Benutzung eingesetzt wird.

Ich glaube man muss dazu in der .cpp Datei das Schlüsselwort export benutzen (nicht zu verwechelsn mit extern)

Aber wie gesagt können das nur sehr wenige Compiler, darum schreibt man bei Templates die Implementierung ebenfalls in den Header.

Ciao,
_