繁体   English   中英

枚举类范围解析运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM