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, botów: 0