कृपया नीचे दिए गए उदाहरण कोड को देखें:नेस्टेड क्लास सदस्य फ़ंक्शन संलग्न कक्षा के फ़ंक्शन तक नहीं पहुंच सकता है। क्यूं कर?
class A
{
private:
class B
{
public:
foobar();
};
public:
foo();
bar();
};
कक्षा ए & बी कार्यान्वयन के भीतर:
A::foo()
{
//do something
}
A::bar()
{
//some code
foo();
//more code
}
A::B::foobar()
{
//some code
foo(); //<<compiler doesn't like this
}
संकलक विधि foobar() के भीतर foo() को कॉल करता है। इससे पहले, मैंने कक्षा ए के निजी सदस्य समारोह के रूप में foo() को सार्वजनिक रूप से माना था कि बी का कार्य इसे देख नहीं सकता है। बेशक, यह मदद नहीं की। मैं ए की विधि द्वारा प्रदान की गई कार्यक्षमता का दोबारा उपयोग करने की कोशिश कर रहा हूं। संकलक इस फ़ंक्शन कॉल को क्यों अनुमति नहीं देता है? जैसा कि मैंने इसे देखा, वे एक ही संलग्न वर्ग (ए) का हिस्सा हैं। मैंने सोचा कि सी ++ मानकों में कक्षा को घेरने के लिए नेस्टेड क्लास मीबर के लिए एक्सेसिबिलिटी समस्या हल हो गई थी।
बी के लिए एक ही विधि (foo()) को फिर से लिखने के बिना मैं क्या करने की कोशिश कर रहा हूं, जो बी को ए के भीतर घोंसला रखता है?
मैं वीसी ++ कंपाइलर वर्-9 (विजुअल स्टूडियो 2008) का उपयोग कर रहा हूं। आपके सहयोग के लिए धन्यवाद।
+1 के उपयोगकर्ताओं से छिपा रखना चाहता हूं, बस एक नाइटपिक - 'पैरेंट' शायद सदस्य चर के लिए सबसे अच्छा नाम नहीं है - विरासत के साथ आसान भ्रम। –
मैं बस उल्लेख करना चाहता था कि नेस्टेड कक्षा बी के लिए कक्षा ए – manifest
का संदर्भ रखने के लिए बहुत अच्छा डिजाइन कारण था उदाहरण के साथ स्पष्टीकरण के लिए धन्यवाद। सी ++ मानक 11.8, जिसे मैं अनुमान लगा रहा था कि यह बदल गया है, कक्षा के सदस्य द्वारा नेस्टेड कक्षा तक पहुंच के बारे में बात करता है। मुझे पता है कि जीसीसी नेस्टेड क्लास द्वारा एक्सेस की अनुमति देता है (मुझे इसके बारे में निश्चित है) लेकिन एमएस वीसी कंपाइलर नहीं करता है। हां दिलचस्प। – Rahul