Szablony, rozłączna kompilacja (g++)

0

Witam!

Mam problem z szablonami klas.
Do testów stworzyłem trywialną klasę 'klasa'.

pliki:

main.cpp

#include <iostream>

#include "klasa.h"

int main()
{
	klasa<int> k1;
	return 0;
} 

klasa.h

template <class T> class klasa {
	public:
		T x;
		
		T fun(T y);		
		klasa();
}; 
 

klasa.cpp

#include "klasa.h"

template <class T> T klasa<T> :: fun(T y) {
	return x*y;
}

template <class T> klasa<T> :: klasa() {
	x = 3;
}
 

Gdy mam całość w jednym pliku main.cpp, to wszystko działa, kompilator nie wypluwa żadnych błędów, lecz gdy wygląda to tak jak powyżej:

(kompilując w ten sposób) :

g++ klasa.cpp main.cpp -o main
 

dostaję :

/tmp/ccAA9eO4.o: In function `main':
main.cpp:(.text+0x10): undefined reference to `klasa<int>::klasa()'
collect2: ld returned 1 exit status
 

wie ktoś może dlaczego?

0

Bo w G++ nie da się użyć extern na szablonach. Wprowadza to dopiero standard C++0x, a by go włączyć musisz dać flagę -std=c++0x, ale i tak nie wiem czy tak zadziała.

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