2012-08-17 16 views
5

supongamos que escribo una clase de plantilla con un constructor de plantilla, así.El constructor de plantillas en la clase de plantilla debe definirse en la definición de clase?

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x){} 
}; 

compila bien. Sin embargo, cuando intento de definir el constructor fuera de la declaración de plantilla, así:

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x); 
}; 


template<typename T, typename S> 
X<T>::X(X<S> y){} 

recibo el siguiente error:

error: invalid use of incomplete type ‘class X<T>’ 

por qué? ¿No es posible definir un constructor de plantilla de una clase de plantilla fuera de la declaración de clase?

Respuesta

10

Tiene dos niveles de plantillas, y tienen que especificar por separado.

template<typename T> 
template<typename S> 
X<T>::X(X<S> y){} 
5

Prueba esto:

template<typename T> 
template<typename S> 
X<T>::X()(X<S> y) 
{ 
} 
4

Su clase tiene un único parámetro de plantilla, y que tienen esencialmente una función de plantilla dentro de ella, por lo que necesita

template<typename T> 
template <typename S> 
X<T>::X(X<S> y){} 
Cuestiones relacionadas