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