2011-06-24 30 views
7

Soy un novato en las plantillas, así que discúlpeme por las preguntas ingenuas. Estoy recibiendo errores en el código:¿Qué significa "uso de plantilla de clase requiere lista de argumentos de plantilla"?

template <class t> 
class a{ 
public: 
    int i; 
    a(t& ii):i(ii){} 
}; 


int main() 
{ 
    a *a1(new a(3)); 
    cout<<a1.i; 

    _getch(); 
} 

errores de compilación:

  1. 'a' : use of class template requires template argument list
  2. 'a' : class has no constructors
+10

no creo que es agradable downvote pregunta, sólo porque algo ingenuo se le está pidiendo ... Pongo No creo que usted, Sr. Descendente, nunca haya pasado esta etapa en su vida profesional cuando algo tan obvio como esto no estaba claro para usted tampoco –

+3

¡Muchas gracias, muchachos! Ustedes hacen que TAN sea un gran lugar ... respondan preguntas ingenuas Qs modestamente sin ridiculizar :))) –

+0

@Armen: Para ser justos, estamos hablando de una pregunta que cualquier libro en C++ en existencia respondería. –

Respuesta

6
a(t& ii):i(ii){} 

Esto debería ser:

a(const t& ii):i(ii){} 

Así que puede pasar literales const, y los temporales al constructor .

y luego hacer esto:

a<int> *a1(new a<int>(3)); 

También puede escribir:

a<int> a2(3); 
+1

¡tanto! –

+0

Tiene el tipo incorrecto en la plantilla. Definitivamente debe ser 'a * a1 (nuevo a (3));' Solo asegúrese de que la barra de Foo sea convertible a int. –

+1

@Martin: ¿Por qué? : -/ – Nawaz

10

Uso

a<int> *a1(new a<int>(3)); 
^^^^^   ^^^^ 

Si Wa nt su parámetro de plantilla que deducirse de forma automática, puede utilizar una función de ayuda:

template<class T> 
a<T> * createA (const T& arg) //please add const to your ctor, too. 
{ 
    return new a<T>(arg) 
} 
+0

¿Puedo preguntar humildemente para qué sirve el downvote? Para el punto y coma, ¿me olvidé? –

Cuestiones relacionadas