簡體   English   中英

模板類中的模板構造函數必須在類定義中定義嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM