Chúng ta hãy xây dựng mã mà tôi vừa mới tìm thấy ở đâu đó trong dự án:Enum giá trị va chạm với tên enum
namespace Test
{
enum EName
{
CoolEnum,
NiceEnum
};
enum CoolEnum
{
CoolVal1,
CoolVal2
};
enum NiceEnum
{
NiceVal1,
NiceVal2
};
}
Câu hỏi của tôi là lý do tại sao các trình biên dịch cho phép một cái gì đó như thế này. Hãy lấy mẫu mã tại đây:
Test::CoolEnum cEnum = Test::NiceVal1; // INVALID, as compiler refers to Test::CoolEnum value of Test::Ename enum
Tại sao sự nhầm lẫn đó được cho phép? Tôi hiểu tại sao tôi phải thêm từ khóa enum, vì vậy trình biên dịch biết rõ ràng rằng tôi đang khai báo một biến của enum đã cho, không sử dụng giá trị của enum khác trong cùng một không gian tên. Tôi chỉ không hiểu tại sao ngay từ đầu nó thậm chí còn có thể tạo ra một công trình như vậy. lớp enum
Tôi đoán đó là trình biên dịch được xác định bởi vì mã trên Ideone gây ra lỗi: http://ideone.com/4GDTF – tinman
Đó là lý do tại sao tôi đã đặt gcc nhưng theo như tôi biết vc cũng cho phép xây dựng như vậy –
@Kamil bạn có thể muốn để thay đổi tên của hằng số enum của NiceEnum, kể từ khi bạn sao chép-dán nó từ CoolEnum và họ xung đột. –