У меня есть следующий код:
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. Если я изменяю тип параметра Bar с помощью :: Foo, он работает.
Мой вопрос заключается в том, что является рациональным для такого поведения (я полагаю, это связано с тем, что наследование заставляет Bar войти в пространство имен A, но я не могу найти какую-либо документацию, подтверждающую эту теорию.
A
, которое вы можете увидеть, если разрешите Bar
наследовать от другой структуры в A
. Тогда нет никакой двусмысленности. Это больше похоже на наследование добавляет все от, A::Foo
в Bar
том числе разрешение Foo
на A::Foo
. Извините, я не могу выразить это более точно.