J'ai le code suivant:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
Les compilateurs C ++ se plaignent à "c = foo.b" car A :: Foo n'a pas de membre nommé b. Si je change le type de paramètre Bar avec :: Foo ça marche.
Ma question est de savoir quel est le rationnel derrière ce comportement (je suppose que cela a à voir avec le fait que l'héritage oblige Bar à entrer dans l'espace de noms A, mais je ne trouve aucune documentation à l'appui de cette théorie.
A
, que vous pouvez voir si vous laissez Bar
hériter d'une autre structure A
. Il n'y a alors aucune ambiguïté. Cela ressemble plus à l'héritage qui ajoute tout de A::Foo
à, Bar
y compris la résolution de Foo
à A::Foo
. Désolé, je ne peux pas vraiment l'exprimer plus précisément.