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 Barvon einer anderen Struktur in erben lassen A. Dann gibt es keine Mehrdeutigkeit. Es ist eher so, als würde die Vererbung alles von A::Foobis Bareinschließlich der Auflösung von Foobis hinzufügen A::Foo. Entschuldigung, ich kann es nicht genauer ausdrücken.