【发布时间】:2009-09-04 08:19:05
【问题描述】:
我有这个严重的问题。我在这样的 2 个命名空间中有一个枚举:
namespace FANLib {
namespace ERROR {
enum TYPE {
/// FSL error codes
FSL_PARSER_FILE_IERROR,...
在我的代码中的其他地方,我这样使用它:
FANLib::Log::internalLog(FSLParser::FILE_IERROR, file_ierror, true, FANLib::ERROR::FSL_PARSER_FILE_IERROR);
所有编译都很好,但如果我碰巧包含“windows.h”,我会出错!问题出在“WinGDI.h”中,它有这一行:
#define ERROR 0
并让编译器认为,在 FANLib::... 之后,有一个零! 我得到的错误是:
错误 1 错误 C2589: 'constant' : '::' 右侧的非法令牌
错误 2 错误 C2059:语法错误:'::'
错误 3 错误 C2039:“FSL_PARSER_FILE_IERROR”:不是“全局命名空间”的成员
有什么我可以做的,而不必因为一些粗心的#define 而改变我的命名空间?我在另一篇文章中读到我可以#undef ERROR,但这有多安全?
【问题讨论】:
标签: c++ namespaces c-preprocessor