ฉันมีรหัสต่อไปนี้:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
คอมไพเลอร์ C ++ บ่นที่ "c = foo.b" เนื่องจาก A :: Foo ไม่มีสมาชิกชื่อ b ถ้าฉันเปลี่ยนประเภทของพารามิเตอร์ Bar ด้วย :: Foo มันใช้งานได้
คำถามของฉันคือเหตุผลที่อยู่เบื้องหลังพฤติกรรมนี้ (ฉันคิดว่ามันเกี่ยวข้องกับข้อเท็จจริงที่ว่าการสืบทอดทำให้ Bar ป้อนเนมสเปซ A แต่ฉันไม่พบเอกสารใด ๆ เพื่อสนับสนุนทฤษฎีนี้
A
ซึ่งคุณสามารถดูว่าคุณปล่อยให้Bar
สืบทอดจากโครงสร้างอื่นA
หรือไม่ จากนั้นไม่มีความกำกวม มันเป็นเหมือนมรดกเพิ่มทุกอย่างจากA::Foo
การBar
รวมทั้งความละเอียดของการFoo
A::Foo
ขออภัยฉันไม่สามารถแสดงได้อย่างแม่นยำมากขึ้น