2008-11-11 12 views
5

मैं निम्नलिखित संकलन त्रुटि हो:मैं std :: सूची में boost :: function क्यों संग्रहीत नहीं कर सकता?

error: expected `;' before 'it'" 

यहाँ मेरी कोड है:

#include <boost/function.hpp> 
#include <list> 

template< class T > 
void example() { 
    std::list< boost::function<T()> >::iterator it; 
} 

ऐसा क्यों होता है? मेरे द्वारा यह कैसे किया जा सकता है?

उत्तर

18

आप पर टेम्पलेट पैरामीटर टी इस तरह पर निर्भर है कि लाइन के सामने typename लगाने की जरूरत है, प्रकार के बाद से आप करते हैं :: iterator:

template< class T > 
void example() { 
    typename std::list< boost::function<T()> >::iterator it; 
} 

लाइन पर विचार करें

std::list< boost::function<T()> >::iterator * it; 

जिसका अर्थ गुणा या पॉइंटर हो सकता है। यही कारण है कि आपको अपना इरादा स्पष्ट करने के लिए typename की आवश्यकता है। इसके बिना, संकलक एक प्रकार का मानता नहीं है, और इस प्रकार इसे वहां एक ऑपरेटर या अर्धविराम की आवश्यकता होती है।


नए सी ++ एफएक्यू एंट्री Where to put template and typename on dependent names से भी परामर्श लें।