我写了以下小脚本:
#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
但是有我的枚举课。为什么周日没有申报?我怎么能改变它?
感谢你回答:)
答案 0 :(得分:6)
写
Day unusedDay, today = Day::sunday;
枚举数属于枚举范围。
答案 1 :(得分:2)
您将enum
与enum 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)