当我尝试编译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,但错误仍然存在.
这就是我害怕的生活,它体现了宏可怕的原因.
一旦你#includeÐ <X11/X.h>,预处理器会咀嚼你的源代码和编译器会看到
Colour colour = Colour::0;
Run Code Online (Sandbox Code Playgroud)
这毫无意义.
一个修复是#undef None在包含文件之后.