2012-08-17 14 views
5

Angenommen, ich schreibe eine Template-Klasse mit einem Template-Konstruktor, so.Vorlagenkonstruktor in der Vorlagenklasse muss in der Klassendefinition definiert sein?

template<typename T> 
class X{ 


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

kompiliert fein. Aber wenn ich versuche, den Konstruktor außerhalb der Template-Deklaration zu definieren, wie folgt aus:

template<typename T> 
class X{ 


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


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

Ich erhalte den folgenden Fehler:

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

warum? Ist es nicht möglich, einen Vorlagenkonstruktor einer Vorlagenklasse außerhalb der Klassendeklaration zu definieren?

Antwort

10

Sie haben zwei Ebenen von Vorlagen, und sie separat zu spezifizieren.

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

Versuchen Sie folgendes:

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

Ihre Klasse hat einen einzigen Template-Parameter, und Sie haben im Wesentlichen eine Template-Funktion in der es, so müssen Sie

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