Eu tenho o seguinte código:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
Compiladores C ++ reclamam em "c = foo.b" porque A :: Foo não possui um membro chamado b. Se eu alterar o tipo de parâmetro Bar com :: Foo, ele funcionará.
Minha pergunta é qual é o racional por trás desse comportamento (suponho que tenha a ver com o fato de a herança fazer Bar entrar no espaço de nomes A, mas não consigo encontrar nenhuma documentação para apoiar essa teoria.
A, que você pode ver se deixar Barherdar de outra estrutura A. Então não há ambiguidade. É mais como se a herança adicionasse tudo, desde A::Fooaté Bara resolução de Fooaté A::Foo. Desculpe, não posso realmente expressar isso de forma mais precisa.