错误:未在此范围内声明'enumElement'

时间:2016-09-04 14:06:28

标签: c++ enums

我写了以下小脚本:

#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
    enum class Day {sunday, monday, thuesday, wednesday, thursday, friday, saturday};
    Day unusedDay, today = sunday;
}

但我有一个问题。当我调试程序时,编译器说:

error: 'sunday' was not declared in this scope

但是有我的枚举课。为什么周日没有申报?我怎么能改变它?

感谢你回答:)

2 个答案:

答案 0 :(得分:6)

Day unusedDay, today = Day::sunday;

枚举数属于枚举范围。

答案 1 :(得分:2)

您将enumenum class混淆。假设你的代码是这样的:

enum Day {sunday, monday, thuesday, wednesday, thursday, friday, saturday};
Day unusedDay, today = sunday;

然后上面的代码会编译,因为普通的enum具有全局可见的值,因此您可以像Day unusedDay, today = sunday;一样访问它们。至于enum class es,规则略有不同。为了您的示例,您可以编写如下代码:

enum Day {sunday, monday, thuesday, wednesday, thursday, friday, saturday};
Day unusedDay, today = Day::sunday;

如果您查看enum的vs enum class es的文档,就会看到:

<强>枚举

  

声明其基础类型未修复的 unscoped 枚举类型 -

请注意,在这里使用 unscoped 这个词意味着该变量只有它的名称才可用。

枚举类

  

声明一个范围枚举类型,其基础类型为int(关键字class和struct完全等效)

如此处所示,enum class的作用域仅限于enumname::value;

Source