小编典典

如何在 C++ 中使用枚举

all

假设我们有一个enum类似的内容:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};

我想创建一个实例enum并用适当的值初始化它,所以我这样做:

Days day = Days.Saturday;

现在我想用现有enum值检查我的变量或实例,所以我这样做:

if (day == Days.Saturday)
{
    std::cout << "Ok its Saturday";
}

这给了我一个编译错误:

错误:“。”标记之前的预期主表达式

所以要清楚,说之间有什么区别:

if (day == Days.Saturday) // Causes compilation error

if (day == Saturday)

?

这两个实际上指的是什么,一个是可以的,一个会导致编译错误?


阅读 61

收藏
2022-05-31

共1个答案

小编典典

这段代码是错误的:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
Days day = Days.Saturday;
if (day == Days.Saturday)

因为Days不是范围,也不是对象。它是一种类型。并且类型本身没有成员。你写的相当于std::string.clear.
std::string是一种类型,所以你不能.在它上面使用。您.在类的 实例 上使用。

不幸的是,枚举是神奇的,所以类比到此为止。因为有了一个类,你可以做得到std::string::clear一个指向成员函数的指针,但是在C03中,Days::Sunday是无效的。(这是可悲的)。这是因为
C
(在某种程度上)与 C 向后兼容,并且 C 没有命名空间,因此枚举必须在全局命名空间中。所以语法很简单:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
Days day = Saturday;
if (day == Saturday)

幸运的是,发现这已在C++11 中得到解决。更改enumenum class并获得自己的范围;soDays::Sunday不仅有效,而且 _是_访问Sunday. 快乐的时光!

2022-05-31