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

时间:2012-08-17 15:20:46

标签: c++ templates constructor

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

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>’

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

3 个答案:

答案 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){}