मैं कुछ बच्चे वर्गों के लिए कुछ सामान्य कार्यक्षमता प्रदान करने के लिए एक टेम्पलेट कक्षा का उपयोग करना चाहता हूं जो बहुत समान हैं। एकमात्र भिन्नता यह है कि प्रत्येक का उपयोग किया जाता है।एक टेम्पलेट पैरामीटर के रूप में एक गणना का उपयोग
:यह माता पिता के वर्ग
template<typename T> class E_EnumerationBase : public SimpleElement
{
public:
E_EnumerationBase();
virtual bool setValue(QString choice);
virtual T getState();
protected:
T state;
QHash<QString, T> dictionary;
};
template<typename T> E_EnumerationBase<T>::E_EnumerationBase() {
state = 0;
}
template<typename T> bool E_EnumerationBase<T>::setValue(QString choice) {
T temp;
temp = dictionary.value(choice, 0);
if (temp == 0) {
return false;
}
value = choice;
state = temp;
return true;
}
template<typename T> T E_EnumerationBase<T>::getState() {
return state;
}
यह बच्चों में से एक है
enum TableEventEnum {
NO_VALUE = 0,
ATTRACT = 1,
OPEN = 2,
CLOSED = 3
};
class E_TableEvent : public E_EnumerationBase<enum TableEventEnum>
{
public:
E_TableEvent();
};
यह निर्माता
E_TableEvent::E_TableEvent()
{
state = NO_VALUE;
dictionary.insert("attract", ATTRACT);
dictionary.insert("open", OPEN);
dictionary.insert("closed", CLOSED);
}
लिंकर इस त्रुटि फेंक रहा है है
e_tableevent.cpp:6: error: undefined reference to `E_EnumerationBase<TableEventEnum>::E_EnumerationBase()'
एक गणन इस तरह एक टेम्पलेट के लिए पैरामीटर के रूप में इस्तेमाल किया जा सकता है?
"* संकलक इस त्रुटि को फेंक रहा है: *" नहीं, _linker_ उस त्रुटि को फेंक रहा है। – ildjarn
हैडर फ़ाइल में आपकी कन्स्ट्रक्टर परिभाषा है? – Lol4t0
नहीं, परिभाषा एक अलग स्रोत फ़ाइल में है। त्रुटि लिंक पर दिखाई देती है। – IslandCow