Tôi có đoạn mã sau:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
Trình biên dịch C ++ phàn nàn tại "c = foo.b" vì A :: Foo không có thành viên tên b. Nếu tôi thay đổi loại tham số Bar bằng :: Foo thì nó hoạt động.
Câu hỏi của tôi là lý do đằng sau hành vi này là gì (tôi cho rằng nó phải làm với thực tế là sự kế thừa làm cho Bar bước vào không gian tên A nhưng tôi không thể tìm thấy bất kỳ tài liệu nào để hỗ trợ lý thuyết này.
A, mà bạn có thể thấy nếu bạn để Barkế thừa từ một cấu trúc khác trong A. Thế thì không có sự mơ hồ. Nó là giống như các thừa kế cho biết thêm tất cả mọi thứ từ A::Foođể Barbao gồm độ phân giải Footới A::Foo. Xin lỗi, tôi không thể thực sự diễn đạt nó chính xác hơn.