为什么定义与枚举类冲突?

Оле*_*лов 3 c++ enum-class

这是发生冲突的一小段代码。有什么方法可以正确解决这个问题吗?

#define DEBUG 0

enum class TypeEnum : int
{
    DEBUG = 0,
    INFO = 1
};
Run Code Online (Sandbox Code Playgroud)

Jos*_*son 5

这是预处理器的本质。以 开头的行#是对预处理器的命令。#define是一个定义文本替换的命令,它将在预处理时重写您的代码。在这种情况下, 的所有实例都DEBUG将替换为0,因此代码变为:

enum class TypeEnum : int
{
    0 = 0,
    INFO = 1
};
Run Code Online (Sandbox Code Playgroud)

这当然是没有意义的。

  • @ОлегПривалов 按照惯例,带有 ALL_CAPS 的标识符用于预处理器宏,因此请避免声明全部大写的 C++ 标识符。 (2认同)