Bil*_*ias 6 c++ namespaces c-preprocessor
我有这个严重的问题.我在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:'常数':'::'右侧的非法令牌
错误2错误C2059:语法错误:'::'
错误3错误C2039:'FSL_PARSER_FILE_IERROR':不是'`global namespace''的成员
我可以做些什么,而不必因为一些不经意而改变我的命名空间#define?我在另一篇文章中读过我可以#undef ERROR,但这有多安全?
ava*_*kar 14
通常,您应该避免使用全大写标识符,因为它们用于宏.在这种情况下,我将重命名命名空间.
(作为旁注,<windows.h> #define其他类似的东西GetPrinter,实际上它很烦人.我通常会使用#undef它.它也有助于只包含<windows.h>.cpp文件,并确保受标题影响的范围尽可能小.)
| 归档时间: | 
 | 
| 查看次数: | 4468 次 | 
| 最近记录: |