मान लीजिए कि मैं टेम्पलेट कन्स्ट्रक्टर के साथ एक टेम्पलेट क्लास लिखता हूं, जैसे।टेम्पलेट वर्ग में टेम्पलेट कन्स्ट्रक्टर को कक्षा परिभाषा में परिभाषित किया जाना चाहिए?
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>’
क्यों? कक्षा घोषणा के बाहर एक टेम्पलेट वर्ग के टेम्पलेट कन्स्ट्रक्टर को परिभाषित करना संभव नहीं है?