Tôi gặp vấn đề nghiêm trọng này. Tôi có một điều tra trong vòng 2 không gian tên như thế này:Xung đột giữa không gian tên và xác định
namespace FANLib {
namespace ERROR {
enum TYPE {
/// FSL error codes
FSL_PARSER_FILE_IERROR,...
và ở một nơi khác trong mã của tôi, tôi sử dụng nó như thế này:
FANLib::Log::internalLog(FSLParser::FILE_IERROR, file_ierror, true, FANLib::ERROR::FSL_PARSER_FILE_IERROR);
Tất cả các biên dịch tốt và tốt, nhưng nếu tôi xảy ra bao gồm " windows.h ", tôi gặp lỗi! Vấn đề nằm trong "WinGDI.h" có dòng này:
#define ERROR 0
và làm cho trình biên dịch nghĩ rằng, sau FANLib :: ..., có một số không! Các lỗi tôi nhận được là:
Lỗi 1 lỗi C2589: 'liên tục': dấu hiệu bất hợp pháp trên bên phải của '::'
Lỗi 2 lỗi C2059: lỗi cú pháp: '::'
lỗi 3 lỗi C2039: 'FSL_PARSER_FILE_IERROR': không phải là thành viên của '`namespace toàn cầu''
có bất cứ điều gì tôi có thể làm về vấn đề này, mà không cần phải thay đổi không gian tên của tôi do một số suy nghĩ #define
? Tôi đã đọc trong một bài đăng khác mà tôi có thể #undef LRI, nhưng làm thế nào an toàn là điều đó?
Bạn thực hiện một số điểm rất tốt. Thật không may, tôi vẫn chỉ có thể cho câu trả lời của bạn một phiếu bầu. – sbi
Tôi sẽ thêm "quy ước được chấp nhận chuẩn" là các số nhận dạng là tất cả các mũ là các macro. –
Windows.h mất tất cả "quy ước được chấp nhận tiêu chuẩn", ném chúng ra ngoài cửa sổ và khai báo tất cả các macro trên chúng. Nhưng vâng, lời khuyên tốt. Không sử dụng tất cả các mũ cho bất kỳ điều gì khác hơn #defines và không cho phép hiển thị windows.h trong tiêu đề của bạn. – jalf