Mam następujący kod:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
Kompilatory C ++ narzekają na „c = foo.b”, ponieważ A :: Foo nie ma członka o nazwie b. Jeśli zmienię typ parametru Bar za pomocą :: Foo to działa.
Moje pytanie brzmi, jakie jest racjonalne uzasadnienie tego zachowania (przypuszczam, że ma to związek z faktem, że dziedzictwo powoduje, że Bar wchodzi w przestrzeń nazw A, ale nie mogę znaleźć żadnej dokumentacji na poparcie tej teorii.
A, którą możesz zobaczyć, jeśli pozwolisz Barodziedziczyć po innej strukturze A. Wtedy nie ma dwuznaczności. To jest bardziej jak dziedziczenie dodaje wszystko od A::Foodo Barwłącznie z rozdzielczością Foodo A::Foo. Przepraszam, nie potrafię tego dokładniej wyrazić.