मेरे पास निम्नलिखित कोड हैं:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
C ++ कंपाइलर "c = foo.b" पर शिकायत करता है क्योंकि A :: Foo में b नाम का कोई सदस्य नहीं है। अगर मैं बार पैरामीटर के प्रकार के साथ :: Foo यह काम करता है।
मेरा सवाल यह है कि इस व्यवहार के पीछे क्या तर्क है (मुझे लगता है कि इस तथ्य के साथ यह करना है कि विरासत बनाता है बार एक नामस्थान में प्रवेश करता है, लेकिन मुझे इस सिद्धांत का समर्थन करने के लिए कोई दस्तावेज नहीं मिल सकता है।
A
, जिसे आप देख सकते हैं कि क्या आप Bar
किसी अन्य संरचना से इनहेरिट करते हैं A
। फिर कोई अस्पष्टता नहीं है। यह और अधिक है जैसे कि इनहेरिटेंस के संकल्प A::Foo
को Bar
शामिल करने से लेकर सब कुछ जोड़ता Foo
है A::Foo
। क्षमा करें, मैं वास्तव में इसे अधिक सटीक व्यक्त नहीं कर सकता।