मैं एक सदस्य स्तरीय एक सूची वर्ग के लिए के रूप में एक इटरेटर वर्ग बनाने के लिए कोशिश कर रहा हूँ, और अविवेक ऑपरेटर (*) सूची यह की ओर इशारा करते है का उपयोग करने के ओवरलोड कोशिश कर रहा हूँ:इंडिकेटर ऑपरेटर को अधिभार कैसे करें? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
जहां lstptr
एक सूची के लिए सूचक है, current
एक नोड क्लास के लिए एक सूचक है, और नोड क्लास में प्रकार T
का डेटा सदस्य होता है।
इटरेटर इस तरह घोषित किया जाता है:
list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)
त्रुटि:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
मैं ठीक अतिभारित ऑपरेटर के समारोह परिभाषा * संकलित करने के लिए है, लेकिन में सक्षम हूँ जब मैं की तरह कुछ करने की कोशिश मुझे लगता है कि < 1> कि मैं एक अवैध संकेत का उपयोग कर रहा हूं, और < 2> कि यह सूची :: iterator से int में परिवर्तित नहीं हो सकता है। दोनों त्रुटियां चौदह पंक्ति पर होती हैं।
क्या कोई जानता है कि मैं क्या गलत कर रहा हूं और मैं इंडिकेटर ऑपरेटर को सही तरीके से कैसे अधिभारित कर सकता हूं?
एनबी: यदि आपको और कोड देखने की आवश्यकता है, तो मुझे कौन सा हिस्सा बताएं, क्योंकि मैं पूरे कोड को यहां नहीं रखना चाहता क्योंकि यह 205 लाइनों में है, और उन पंक्तियों में से 204 (मुझे लगता है) कोई त्रुटि है
क्या आपको "सूची :: इटरेटर आईटी टाइप करना था;" - यह "सूची :: इटरेटर आईटी होना चाहिए;", है ना? –
leander
@leander: हाँ, इसकी सूची वास्तविक कोड में, मैंने बस इसे अपने उदाहरण में टाइप करना गड़बड़ कर दिया। –