假设我用模板构造函数编写了一个模板类,就像这样。
template<typename T>
class X{
template<typename S>
X(X<S> x){}
};
编译得很好。但是,当我尝试在模板声明之外定义构造函数时,如下所示:
template<typename T>
class X{
template<typename S>
X(X<S> x);
};
template<typename T, typename S>
X<T>::X(X<S> y){}
我收到以下错误:
error: invalid use of incomplete type ‘class X<T>’
为什么?不能在类声明之外定义模板类的模板构造函数吗?