2012-08-17 15 views
5

मान लीजिए कि मैं टेम्पलेट कन्स्ट्रक्टर के साथ एक टेम्पलेट क्लास लिखता हूं, जैसे।टेम्पलेट वर्ग में टेम्पलेट कन्स्ट्रक्टर को कक्षा परिभाषा में परिभाषित किया जाना चाहिए?

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

क्यों? कक्षा घोषणा के बाहर एक टेम्पलेट वर्ग के टेम्पलेट कन्स्ट्रक्टर को परिभाषित करना संभव नहीं है?

उत्तर

10

आप टेम्पलेट्स के दो स्तर हैं, और उन्हें अलग से निर्दिष्ट करना होगा।

template<typename T> 
template<typename S> 
X<T>::X(X<S> y){} 
5

इस प्रयास करें:

template<typename T> 
template<typename S> 
X<T>::X()(X<S> y) 
{ 
} 
4

आपका वर्ग एक एकल टेम्पलेट पैरामीटर है, और आप अनिवार्य रूप से इसके अंदर एक टेम्पलेट समारोह है, तो आप

template<typename T> 
template <typename S> 
X<T>::X(X<S> y){} 
की जरूरत
संबंधित मुद्दे