假设我用模板构造函数编写模板类,就像那样。
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>’
为什么呢?是否无法在类声明之外定义模板类的模板构造函数?
答案 0 :(得分:10)
您有两个级别的模板,必须单独指定。
template<typename T>
template<typename S>
X<T>::X(X<S> y){}
答案 1 :(得分:5)
试试这个:
template<typename T>
template<typename S>
X<T>::X()( X<S> y )
{
}
答案 2 :(得分:4)
你的类有一个模板参数,你基本上有一个模板函数,所以你需要
template<typename T>
template <typename S>
X<T>::X(X<S> y){}