2010-02-11 15 views

उत्तर

7

आपको typename std::list<T>::iterator की आवश्यकता है। ऐसा इसलिए है क्योंकि list टेम्पलेट पैरामीटर पर निर्भर करता है, इसलिए संकलक यह नहीं जानता कि वास्तव में iterator नाम क्या होगा (ठीक है, तकनीकी रूप से यह जान सकता है, लेकिन सी ++ मानक उस तरह से काम नहीं करता है)। कीवर्ड typename संकलक को बताता है कि निम्न प्रकार का नाम क्या है।

+1

मैं अभी भी यह क्यों इतना है नहीं मिलता है की जरूरत है। उदाहरण के लिए, हमें 'typename std :: list तत्वों' का उपयोग करने की आवश्यकता क्यों नहीं है? –

+1

@Agnel: क्योंकि तब हम टेम्पलेट वर्ग के भीतर परिभाषित नामों तक पहुंचने की कोशिश नहीं करेंगे। – UncleBens

3

आप एक typename

template <class T> class Foo { 
    public: 
     typename std::list<T>::iterator iter; 

    private: 
     std::list<T> elements; 
}; 
संबंधित मुद्दे