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 Bar
herdar de outra estrutura A
. Então não há ambiguidade. É mais como se a herança adicionasse tudo, desde A::Foo
até Bar
a resolução de Foo
até A::Foo
. Desculpe, não posso realmente expressar isso de forma mais precisa.