[英]Template constructor in template class must be defined in the class definition?
假設我用這樣的模板構造函數編寫一個模板類。
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>’
為什么? 是否可以在類聲明之外定義模板類的模板構造函數?
您有兩個級別的模板,必須分別指定它們。
template<typename T>
template<typename S>
X<T>::X(X<S> y){}
嘗試這個:
template<typename T>
template<typename S>
X<T>::X()( X<S> y )
{
}
您的類只有一個模板參數,並且實際上在其中有一個模板函數,因此您需要
template<typename T>
template <typename S>
X<T>::X(X<S> y){}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.