[C++] Kłopotów z szablonami - ciąg dalszy...

0

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++... :(

0
template<int t> class C {
public:
        C() { /* w konstruktorze ustawiać statyczne składniki? buee! */ }
        static int i;
};

template<int t>
int C<t>::i = 123;

albo jakoś w tym stylu i okolicach.

0

AFAIK to nie jest błędna obsługa szablonów: składniki statyczne klas muszą być deklarowane poza klasami, obojętnie czy to klasa szablonowa czy nie. Ininciajcja składnika statycznego wewnątrz klasy jest mniej lub bardziej dopuszczalnym błędęm (jak każda inicjacja w deklaracji zamiast w definicji)...

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