У меня есть следующий код:
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. Извините, я не могу выразить это более точно.