c++ - 枚举类范围解析运算符

标签 c++ enums macros preprocessor

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

test.cc:5:26: error: expected unqualified-id before numeric constant
Colour colour = Colour::None;

测试.cc

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

int main(){
        Colour colour = Colour::None;
}

状态.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包含文件后。

关于c++ - 枚举类范围解析运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47243398/

相关文章:

C++ 语法/如何在类中声明、填充和访问数组

java - 使用枚举而不是集合的好处

ruby-on-rails - rails : How do I validate uniqueness of certain types in an enum

c++ - 宏不通过直接调用扩展,而是通过间接调用扩展

c++ - 背包问题 - 找出哪些元素被拿走了

c++ - 是否有任何 C/C++ 哈希库(即 python hashlib 之类)

c# - 为什么枚举数组不能用于参数 Enum[]?

c - 产生错误数字的宏

c++ - 当我尝试调用此自定义宏时,所有错误都会出现

android - 在NDK w/gradle上编译两个项目,其中一个依赖另一个的binary