Ho il codice seguente:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
I compilatori C ++ si lamentano di "c = foo.b" perché A :: Foo non ha un membro di nome b. Se cambio il tipo di parametro Bar con :: Foo funziona.
La mia domanda è qual è il razionale dietro questo comportamento (suppongo che abbia a che fare con il fatto che l'eredità fa entrare Bar nello spazio dei nomi A ma non riesco a trovare alcuna documentazione a supporto di questa teoria.
A
, che puoi vedere se lasci Bar
ereditare da un'altra struttura A
. Quindi non c'è ambiguità. E 'più come l'eredità aggiunge tutto dal A::Foo
al Bar
compresa la risoluzione di Foo
a A::Foo
. Mi dispiace, non posso davvero esprimerlo in modo più preciso.