枚举类范围解析运算符

Dav*_*hen 3 c++ enums

当我尝试编译test.cc时g++ test.cc --std=c++14,我收到以下错误.

test.cc:5:26: error: expected unqualified-id before numeric constant
Colour colour = Colour::None;
Run Code Online (Sandbox Code Playgroud)

test.cc

#include "state.h"
#include <X11/X.h>

int main(){
        Colour colour = Colour::None;
}
Run Code Online (Sandbox Code Playgroud)

state.h

enum class Colour { None, Black, White };
Run Code Online (Sandbox Code Playgroud)

而且我发现#include <X11/X.h>,None被定义为常数

 #define None                 0L /* universal null resource or null atom */
Run Code Online (Sandbox Code Playgroud)

困扰我的是我已经使用了范围解析运算符,即Colour::None指定我所引用的内容None,但错误仍然存​​在.

Bat*_*eba 5

这就是我害怕的生活,它体现了宏可怕的原因.

一旦你#includeÐ <X11/X.h>,预处理器会咀嚼你的源代码和编译器会看到

Colour colour = Colour::0;
Run Code Online (Sandbox Code Playgroud)

这毫无意义.

一个修复是#undef None在包含文件之后.