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 để Bar
kế 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
để Bar
bao gồm độ phân giải Foo
tới A::Foo
. Xin lỗi, tôi không thể thực sự diễn đạt nó chính xác hơn.