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

テンプレートには 2 つのレベルがあり、それらを個別に指定する必要があります。

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

クラスには 1 つのテンプレート パラメーターがあり、基本的にその中にテンプレート関数があるため、

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