बस कुछ ऐसी चीज पर ठोकर खाई जो मैं समझा नहीं सकता। निम्नलिखित कोडकभी-कभी इसका उपयोग आवश्यक है?
template<int a>
class sub{
protected:
int _attr;
};
template<int b>
class super : public sub<b>{
public:
void foo(){
_attr = 3;
}
};
int main(){
super<4> obj;
obj.foo();
}
जबकि जब मैं बदल _attr = 3;
this->attr = 3;
लिए वहाँ कोई समस्या नहीं हो रहा है संकलन नहीं है।
वह क्यों है? क्या इसका कोई उपयोग करने के लिए आपको कोई समस्या है?
मैं g++ test.cpp -Wall -pedantic
इस्तेमाल किया संकलित करने के लिए और मैं निम्नलिखित त्रुटि मिलती है
test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
[दो चरण नाम लुकअप] (के बारे में पढ़ें http://blog.llvm.org/2009/12/dreaded-:
एक और बहुत सामान्य कारण उपयोग करने के लिए अस्पष्टता समस्याओं को हल करने है दो चरण-नाम-lookup.html)। (यह भी अक्सर पूछे जाने वाले प्रश्न: [मुझे त्रुटियां क्यों मिल रही हैं जब मेरा टेम्पलेट-व्युत्पन्न-वर्ग उस सदस्य का उपयोग करता है जो इसे अपने टेम्पलेट-बेस-क्लास से प्राप्त करता है?] (Http://www.parashift.com/c++-faq/nondependent-name -lookup-members.html)) – ildjarn