假設我用模板構造函數編寫模板類,就像那樣。模板類中的模板構造函數必須在類定義中定義?
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>’
爲什麼呢?是不是可以在類聲明之外定義一個模板類的模板構造函數?