2012-09-07 29 views
11

Tengo un problema con una plantilla de clase. Quiero que los datos privados en una clase para ser un vector de vectores de algún tipo de tipo numérico, es decir:La plantilla de la clase C++ es una plantilla: el argumento de la plantilla no es válido

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

Pero quiero que el tipo de vector (estoy usando una biblioteca de vectores de terceros, junto con stl vectores), y el tipo de elemento a ser modelado. Probé plantillas de plantillas, pero ahora no creo que esa sea la solución a mi problema. Un ejemplo muy simplificado es:

#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; 
} 

Como se muestra compila bien, pero si I descomentar la segunda línea en el principal, consigo el error (g ++ 4.6):

error: template argument 1 is invalid 

¿Por qué recibo este ¿error? ¿Y alguien tiene una solución sugerida? Gracias!

+20

Cuente los '<' sy los '>' s en la línea que no funciona. Falta uno ... –

+3

Ese es un mensaje de error realmente pobre, completamente engañoso. –

+0

@PeteBecker: Es una pena. Me estaba preparando para desenterrar mi [reencuadernador de plantilla] (http://stackoverflow.com/a/11723847/596781). –

Respuesta

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; 
} 

Funciona bien. Extrañas el tercer > en la declaración de doesnt_work.

+3

¡Gracias! ¡Ahora me siento realmente estúpido! – jtravs

Cuestiones relacionadas