Witam, już kiedyś zadawałem inne pytanie odnośnie problemów z użyciem szablonów pod g++ 3.4.2, aczkolwiek już znalazłem sposób na ich rozwiązanie.
Teraz jednak pojawiły się inne problemy:
template<int t> class C {
public:
C() {i = 123;}
static int i;
};
int main() {
C<987> c;
return 0;
}
(Wymyśliłem bardzo prosty przykład by tylko pokazać gdzie jest problem)
Mianowicie chodzi o to, że przy próbie odwołania się do statycznego elementu klasy szablonowej otrzymuję błąd linkowania:
E:\projects\onlyfour>g++ Example.cpp -o Example.exe
C:\Users\piotrek\AppData\Local\Temp/ccstbaaa.o(.text$_ZN1CILi987EEC1Ev[C<987>::C
()]+0x5):Example.cpp: undefined reference to `C<987>::i'
collect2: ld returned 1 exit status
Gdy tylko usunę wadliwą instrukcję i = 123; wszystko ładnie się kompiluje. Podobnie usunięcie static albo usunięcie szablonów także daje pozytywny rezultat kompilacji.
Wiem już, że jest to związane z błędną obsługą szablonów kompilatora g++ 3.4.2 (najnowszy na Windows). Aczkolwiek może jest jakieś obejście powyższego problemu?
EDIT:
Sprawdziłem na szybko i powyższa klasa nie kompiluje się także pod Microsoft Visual Studio C++... :(