模板类中的模板构造函数必须在类定义中定义吗?

gex*_*ide 6 c++ templates constructor

假设我用模板构造函数编写模板类,就像那样.

template<typename T>
class X{


    template<typename S>
    X(X<S> x){}
};
Run Code Online (Sandbox Code Playgroud)

编译好.但是,当我尝试在模板声明之外定义构造函数时,如下所示:

template<typename T>
class X{


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


template<typename T, typename S>
X<T>::X(X<S> y){}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: invalid use of incomplete type ‘class X<T>’
Run Code Online (Sandbox Code Playgroud)

为什么?是否无法在类声明之外定义模板类的模板构造函数?

Bo *_*son 11

您有两个级别的模板,必须单独指定它们.

template<typename T>
template<typename S>
X<T>::X(X<S> y){}
Run Code Online (Sandbox Code Playgroud)


Tor*_*zki 5

试试这个:

template<typename T>
template<typename S>
X<T>::X()( X<S> y )
{
}
Run Code Online (Sandbox Code Playgroud)