Enum class 作用域解析运算符
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/X.h>
,None
被定义为常数
#define None 0L /* universal null resource or null atom */
困扰我的是,我已经使用范围解析运算符,即Colour::None
,来指定我指的是哪个None
,但错误仍然发生。
恐怕这就是生活,它集中体现了宏之所以糟糕的原因。
一旦你 #include
d <X11/X.h>
,预处理器将分解你的源代码,编译器将看到
Colour colour = Colour::0;
这毫无意义。
一个修复方法是 #undef None
包含文件后。
你有提问吗?
无论如何,一个可能的前进方向是稍微重构您的代码。我会做的是
a) 仅在 1 个 cpp 文件中执行“#include < X11/X.h >”,也许将其命名为 x11x.cpp.
然后,当你需要使用X11/X.h代码的函数时,
2a) 在 x11x.hpp.
中添加函数声明(即可能 'void foo1(int)')
2b) 并实现您的 'foo1(int)' 以调用 x11x.cpp.
中的 "X11/X.h" 函数
应该对性能影响很小。
现在这个不幸的宏只会干扰 x11.cpp 的代码,所以请保持此代码小。
当我尝试通过 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/X.h>
,None
被定义为常数
#define None 0L /* universal null resource or null atom */
困扰我的是,我已经使用范围解析运算符,即Colour::None
,来指定我指的是哪个None
,但错误仍然发生。
恐怕这就是生活,它集中体现了宏之所以糟糕的原因。
一旦你 #include
d <X11/X.h>
,预处理器将分解你的源代码,编译器将看到
Colour colour = Colour::0;
这毫无意义。
一个修复方法是 #undef None
包含文件后。
你有提问吗?
无论如何,一个可能的前进方向是稍微重构您的代码。我会做的是
a) 仅在 1 个 cpp 文件中执行“#include < X11/X.h >”,也许将其命名为 x11x.cpp.
然后,当你需要使用X11/X.h代码的函数时,
2a) 在 x11x.hpp.
中添加函数声明(即可能 'void foo1(int)')2b) 并实现您的 'foo1(int)' 以调用 x11x.cpp.
中的 "X11/X.h" 函数应该对性能影响很小。
现在这个不幸的宏只会干扰 x11.cpp 的代码,所以请保持此代码小。