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

Odpowiedz Nowy wątek
2011-04-14 18:18

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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?

Pozostało 580 znaków

2011-04-14 18:48
Moderator

Rejestracja: 12 lat temu

Ostatnio: 9 godzin temu

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.


O ile dobrze pamiętam to extern był w pełni wspierany przez jakiś jeden kompilator (było to już w poprzednim standardzie). Ogólnie wydaje się to trochę dla mnie dziwnym pomysłem, ze względu na możliwą interpretację w kompilatorze (trochę według mnie psuje ideę rozłącznej kompilacji). - Zjarek 2011-04-17 02:19

Pozostało 580 znaków

2011-04-16 13:05

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

Odpowiedz

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