मेरे पास ऐसी स्थिति है जहां एक वर्ग परिभाषा है जो इस तरह दिखती है:
template<class T>
class Alpha< Bravo<T> >
{
....
};
मैं जीएनयू जी ++ के साथ संकलित कर रहा हूं और संकलक शिकायत कर रहा है कि अल्फा है, "टेम्पलेट नहीं है"।
मैंने लाइब्रेरी में इस्तेमाल की गई इसी तकनीक को देखा है जिसमें ब्रावो लिखा गया था और ब्रावो एक टेम्प्लेटेड क्लास है। क्या मैं कुछ भूल रहा हूँ? मैंने अल्फा को हड्डी से नीचे उतार दिया है और बिना किसी संकलन सफलता के परीक्षण किया है। मैंने उस जगह से कोड को कॉपी + पेस्ट करने का भी प्रयास किया है जहां मैंने इसे ब्रावो की लाइब्रेरी में काम करते हुए देखा था और वही चीज़, कोई सफलता नहीं, वही त्रुटि।
अग्रिम में धन्यवाद।
2 जवाब
आपके पास जो कुछ है वह आंशिक टेम्पलेट विशेषज्ञता है; हालांकि, किसी भी टेम्पलेट विशेषज्ञता को विशेषज्ञता के लिए एक प्राथमिक टेम्पलेट की आवश्यकता होती है, और वह आपके पास नहीं है।
template<class T>
class Alpha;
template<class T>
class Alpha<Bravo<T> >
{
// ...
};
आपको पहले प्राथमिक टेम्पलेट घोषित करने की आवश्यकता है। आपने जो लिखा है वह एक विशेषज्ञता है।
//primary template - the definition is optional
template<class T>
class Alpha
{
};
//specialization
template<class T>
class Alpha< Bravo<T> >
{
};
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।