सबसे पहले, आप varवर्ग के बाहर गैर-स्थैतिक सदस्य तक पहुंचने का प्रयास कर रहे हैं, जिसे C ++ में अनुमति नहीं है।
मार्क का जवाब सही है।
कुछ भी जो आउटर का हिस्सा है, आउटर के सभी सदस्यों, सार्वजनिक या निजी तक पहुंच होनी चाहिए।
इसलिए आप दो काम कर सकते हैं, या तो 'var' एक्सेस करने के लिए बाहरी वर्ग के उदाहरण के varरूप में घोषित staticकरें या उपयोग करें (क्योंकि एक मित्र वर्ग या फ़ंक्शन को भी निजी डेटा तक पहुंचने के लिए संदर्भ की आवश्यकता होती है)।
स्थैतिक संस्करण
बदलें varकरने के लिए staticयदि आप नहीं चाहते हैं varवर्ग के उदाहरण के साथ जुड़े होने।
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
static int var;
public:
class Inner {
public:
Inner() {
Outer::var = 1;
}
void func() ;
};
};
int Outer::var = 0;
void Outer::Inner::func() {
std::cout << "var: "<< Outer::var;
}
int main() {
Outer outer;
Outer::Inner inner;
inner.func();
}
आउटपुट- var: 1
गैर-स्थिर संस्करण
किसी ऑब्जेक्ट का संदर्भ किसी भी गैर-स्थैतिक सदस्य चर तक पहुँच होना चाहिए।
#include <iostream>
class Outer {
private:
static const char* const MYCONST;
int var;
public:
class Inner {
public:
Inner(Outer &outer) {
outer.var = 1;
}
void func(const Outer &outer) ;
};
};
void Outer::Inner::func(const Outer &outer) {
std::cout << "var: "<< outer.var;
}
int main() {
Outer outer;
Outer::Inner inner(outer);
inner.func(outer);
}
आउटपुट- var: 1
संपादित करें - बाहरी लिंक मेरे ब्लॉग के लिंक हैं।