8

假设我用模板构造函数编写了一个模板类,就像这样。

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

为什么?不能在类声明之外定义模板类的模板构造函数吗?

4

3 回答 3

13

您有两个级别的模板,并且必须分别指定它们。

template<typename T>
template<typename S>
X<T>::X(X<S> y){}
于 2012-08-17T15:24:08.530 回答
5

试试这个:

template<typename T>
template<typename S>
X<T>::X()( X<S> y )
{
}
于 2012-08-17T15:23:49.710 回答
4

你的类有一个模板参数,你本质上里面有一个模板函数,所以你需要

template<typename T>
template <typename S>
X<T>::X(X<S> y){}
于 2012-08-17T15:24:12.697 回答