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 Bar
odziedziczyć po innej strukturze A
. Wtedy nie ma dwuznaczności. To jest bardziej jak dziedziczenie dodaje wszystko od A::Foo
do Bar
włącznie z rozdzielczością Foo
do A::Foo
. Przepraszam, nie potrafię tego dokładniej wyrazić.