[ Iznogud @ 09.03.2002. 18:20 ] @
U jednom heder-u sam definisao template class-u:

//file: Matrix.h
template<class T>
class Matrix {
public:
Matrix (int m, int n); //matrica m x n
Matrix (const Matrix<T>&);
~Matrix ();
// i tako dalje....(sledi deklaracija f-ja)

Udrugom fajlu je definicija gore deklarisanih f-ja.
U trecem fajlu sam hteo da vidim kako to sve funkcionise i u main() funkciji sam stavio:
#include "Matrix.h"
int main(){
Matrix<int> mat(3,3);
}

Compailer ne prijavljuje gresku ali linker izbacuje sledecu gresku:
d:\dev-c++\sinisa\matrix\matmain.o: In function `_tf8_IO_FILE':
//d/dev-c++/sinisa/matrix/matmain.cpp:6: undefined reference to `Matrix<int>::Matrix(int, int)'
//d/dev-c++/sinisa/matrix/matmain.cpp:6: undefined reference to `Matrix<int>::~Matrix(void)'
//d/dev-c++/sinisa/matrix/matmain.cpp:6: undefined reference to `Matrix<int>::~Matrix(void)'

U cemu je problem??
Pozdrav.
PS: primer je po knjizi D. Milicev

[ pegazus @ 09.03.2002. 19:19 ] @
HA,
Pa problem je u tome sto sablomni imaju unutrasnju linkazu.

Znaci da moraju biti potpuno definisani u jedinici prevodjenja(datoteka).

Dakle i definicije funkcija koje koristis moras ukljuciti (#include) u
datoteku u kojoj ih koristis(#include "Matrix.cpp").
Posto imaju unutrasnju linkazu mozes i u vise datoteka
istog projekta ukljuciti istu .cpp datoteku.

Drugo resenje je da deklarises sablone kao export ali
ja nisam naisao na kompajler koji ovo podrzava, ali
je cak prvo resenje efikasnije.

Upozorenje:
Kod sablona vecina gresaka se ne moze pronaci prilikom kompajliranja.
Tako da je najbolje prvo pisati klasu odredjenog tipa, pa
je posle preraditi u sablon.

Pozdrav.
[ Dragi Tata @ 09.03.2002. 21:30 ] @
Već smo pričali o tome. Pogledaj

http://www.elitesecurity.org/tema.php?TopicID=5549