metody w klasach szablonowych-undefined reference

0

mam 2 kody napisane w cpp i jedna biblioteke:

// tmp.h

template <class Typ> class CTmp
{
	public:
		int metoda(Typ dane);
};

// tmp.cpp

#include "tmp.h"

template <class Typ> int CTmp<Typ>::metoda(Typ dane)
{
}

// main.cpp

#include "tmp.h"

int main() 
{
	CTmp<char> klasa;
	
	klasa.metoda('a');	
	return 0;
}

Przy kompilacji (pod gcc v3.3.4) pod linuksem (Debian Sarge):
g++ main.cpp tmp.cpp

daje taki błąd:
/tmp/ccIM4zQp.o(.text+0x1f): In function main': : undefined reference to CTmp<char>::metoda(char)'
collect2: ld returned 1 exit status

hmm, zjadło mi pytanie, które było na końcu- Co źle napisałem i jak prawidłowo napisać klasę szablonową z metodami w c++ ??

0

Niestety definicja klasy szblonowej musi sie znajdowac tam gdzie jej deklaracja, czyli najlepiej w jednym pliku. Mozesz oczywiscie zrobic tez tak:
//tmp.h
[...] //deklaracje klas
#include "tmp.cpp" //na samym koncu

//tmp.cpp
[...] //definicje metod szablonowych

//main.cpp
#include "tmp.h"
[...]

0

dzięki, ja poszedłem w ogóle nie tym tropem - myślałem, że pomyliłem się gdzieś w tej pokręconej składni klas szablonowych :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1