[英]Enum class scope resolution operator
当我尝试通过g++ test.cc --std=c++14
编译test.cc时,我收到以下错误。
test.cc:5:26: error: expected unqualified-id before numeric constant
Colour colour = Colour::None;
test.cc
#include "state.h"
#include <X11/X.h>
int main(){
Colour colour = Colour::None;
}
state.h
enum class Colour { None, Black, White };
我发现通过#include <X11/Xh>
, None
被定义为常量
#define None 0L /* universal null resource or null atom */
困扰我的是我已经使用了范围分辨率运算符,即Colour::None
,来指定我所引用的None
,但错误仍然存在。
这就是我害怕的生活,它体现了宏可怕的原因。
一旦你#include
d <X11/Xh>
,预处理器就会咀嚼你的源代码,编译器就会看到
Colour colour = Colour::0;
这毫无意义。
包含文件后,一个修复是#undef None
。
你问了一个问题吗?
无论如何,一个可能的方向是重构你的代码。 我要做的是
a)仅在1个cpp文件中执行“#include <X11 / Xh>”,也许称之为x11x.cpp。
然后,当你需要使用X11 / Xh代码的功能时,
2a)在x11x.hpp中添加一个函数声明(即可能是'void foo1(int)')。
2b)并实现你的'foo1(int)'来调用x11x.cpp中的“X11 / Xh”函数。
应该对性能影响很小。
而现在不幸的宏只会干扰x11.cpp的代码,所以保持这个代码很小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.