Ich habe folgenden Code:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
C ++ - Compiler beschweren sich bei "c = foo.b", weil A :: Foo kein Mitglied namens b hat. Wenn ich den Typ des Bar-Parameters mit :: Foo ändere, funktioniert es.
Meine Frage ist, was der Grund für dieses Verhalten ist (ich nehme an, es hat damit zu tun, dass die Vererbung Bar dazu bringt, in den A-Namespace einzutreten, aber ich kann keine Dokumentation finden, die diese Theorie unterstützt.
A
, den Sie sehen können, wenn Sie Bar
von einer anderen Struktur in erben lassen A
. Dann gibt es keine Mehrdeutigkeit. Es ist eher so, als würde die Vererbung alles von A::Foo
bis Bar
einschließlich der Auflösung von Foo
bis hinzufügen A::Foo
. Entschuldigung, ich kann es nicht genauer ausdrücken.