Tengo el siguiente 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;
};
Los compiladores de C ++ se quejan en "c = foo.b" porque A :: Foo no tiene un miembro llamado b. Si cambio el tipo de parámetro Bar con :: Foo, funciona.
Mi pregunta es cuál es la razón detrás de este comportamiento (supongo que tiene que ver con el hecho de que la herencia hace que Bar ingrese el espacio de nombres A, pero no puedo encontrar ninguna documentación que respalde esta teoría.
A, que puede ver si deja Barheredar de otra estructura A. Entonces no hay ambigüedad. Se parece más a la herencia se suma todo, desde A::Fooque Barincluyendo la resolución de Fooa A::Foo. Lo siento, realmente no puedo expresarlo con más precisión.