2014-05-05 11 views
5
#include <iostream> 
#include <memory> 

template<typename T> 
class Test: public std::enable_shared_from_this< Test<T> > 
{ 

public: 

    std::shared_ptr< Test<T> > getMe() 
    { 
     return shared_from_this(); 
    }; 

}; 

int main(int argc, const char * argv[]) 
{ 
    Test<int> aTest; 

    return 0; 
} 

पर काम नहीं कर जब मैं मैंenable_shared_from_this xcode 5

Use of undeclared identifier 'shared_from_this' 

मिल मैं इसे और विजुअल स्टूडियो 2010.

+0

आप इसे 'std ::' जैसे 'std :: shared_from_this()' के साथ अर्हता प्राप्त करना भूल गए। –

+0

यहां कोई भी std नेमस्पेस केवल enable_shared_from_this से विस्तार करने के लिए आवश्यक नहीं है और getMe फ़ंक्शन के रिटर्न प्रकार में और वे पहले ही टाइप किए गए हैं। –

+0

प्लस shared_from_this enable_shared_from_this क्लास पर सदस्य फ़ंक्शन है। क्या आप वाकई सवाल पढ़ रहे हैं? –

उत्तर

11
return this->shared_from_this(); 
      ^^^^^^ 

कुलपति ++ 2010 को काम करने का परीक्षण किया Xcode 5 पर इस संकलन करने की कोशिश टेम्पलेट बेस कक्षाओं के लिए लुकअप नियमों को बिल्कुल सही तरीके से लागू नहीं करता है। झुकाव व्यवहार सही है। उपर्युक्त फिक्स इसे आपके प्लेटफ़ॉर्म दोनों पर काम करेगा।

+1

+1, ताकि अधिक संबंधित जानकारी के लिए Google करना आसान हो, यह * निर्भर * और * गैर-निर्भर * नामों के लिए लुकअप के साथ एक समस्या है। योग्यता के बिना 'shared_from_this' ** ** ** एक आश्रित नाम नहीं है। –

+0

बहुत बहुत धन्यवाद! चीजें चाल थी। मुझे अभी भी समझ में नहीं आता है कि इसे यहां 'इस' क्यों चाहिए। इसके लिए जांच करने के लिए कोई डॉक्टर? –

+1

@ali_nakipoglu: ठीक है, हमेशा मानक होता है ... विशेष रूप से 14.6.2/3 * कक्षा या वर्ग टेम्पलेट की परिभाषा में, यदि बेस क्लास टेम्पलेट-पैरामीटर पर निर्भर करता है, तो बेस क्लास स्कोप की जांच नहीं की जाती है कक्षा टेम्पलेट या सदस्य की परिभाषा के बिंदु पर या वर्ग टेम्पलेट या सदस्य के तत्कालता के दौरान अयोग्य नाम लुकअप के दौरान। * लेकिन आप दो चरण लुकअप के लिए भी Google पर जा सकते हैं। –

संबंधित मुद्दे