У мене є такий код:
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
. Вибачте, я не можу реально висловити це більш точно.