私は次のコードを持っています:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
A :: Fooにはbという名前のメンバーがないため、C ++コンパイラーは「c = foo.b」で不平を言います。:: FooでBarパラメータのタイプを変更すると、機能します。
私の質問は、この動作の背後にある合理的なものは何ですか(私はそれが継承によってBarがA名前空間に入るようにするという事実に関係していると思いますが、この理論をサポートするドキュメントを見つけることができません。
A
には入りません。名前空間は、でBar
別の構造体から継承させた場合に確認できますA
。その場合、あいまいさはありません。継承はからすべてを追加し、よりみたいですA::Foo
へBar
の解決などFoo
にA::Foo
。申し訳ありませんが、これ以上正確に表現することはできません。