2012-09-07 11 views
11

Mam problem z szablonem klasy. Chcę danych prywatnych w klasie jako wektor wektorów jakiegoś typu liczbowego, tj:Szablon klasy C++ jest szablonem: argument szablonu jest nieprawidłowy

std::vector<std::vector<double> > 
std::vector<std::vector<std::complex<double> > > 

Ale chcę typ wektora (używam biblioteki wektorów osób trzecich wraz z wektory stl) i typ elementu, który ma być szablonem. Próbowałem szablonów szablonów, ale teraz nie sądzę, że jest to rozwiązanie mojego problemu. A jest bardzo uproszczony przykład to:

#include <complex> 
#include <vector> 
template<typename T> 
class Fred { 
    std::vector<T> data_; 
}; 
int main(){ 
    Fred<std::vector<double> > works; 
    //Fred<std::vector<std::complex<double> > doesnt_work; 
    return 0; 
} 

Jak pokazano kompiluje grzywny, ale jeśli odkomentowaniu drugą linię główną, pojawia się błąd (g ++ 4.6):

error: template argument 1 is invalid 

Dlaczego mam to błąd? Czy ktoś ma sugerowaną poprawkę? Dzięki!

+20

Policz symbole '<' s i '> w linii, która nie działa. Brakuje jednego ... –

+3

To jest naprawdę kiepski komunikat o błędzie, całkowicie mylący. –

+0

@PeteBecker: Wstyd. Przygotowywałem się do wykopania mojego [szablonu rebinder] (http://stackoverflow.com/a/11723847/596781). –

Odpowiedz

16
#include <complex> 
#include <vector> 
template<typename T> 
class Fred { 
    std::vector<T> data_; 
}; 

int main(){ 
    //Fred<std::vector<double> > works; 
    Fred<std::vector<std::complex<double> > > doesnt_work; 
    return 0; 
} 

Działa dobrze. Tęsknisz za trzecim numerem > w deklaracji doesnt_work.

+3

Dzięki! Teraz czuję się naprawdę głupio! – jtravs

Powiązane problemy