【发布时间】:2016-02-23 06:30:14
【问题描述】:
代码是:
//正确
enum StudentNames
{
KENNY, // 0
KYLE, // 1
STAN, // 2
BUTTERS, // 3
CARTMAN, // 4
WENDY, // 5
MAX_STUDENTS // 6
};
int main()
{
int testScores[MAX_STUDENTS]; // allocate 6 integers
testScores[STAN] = 76; // still works
return 0;
}
//不正确:给出编译时错误
enum class StudentNames
{
KENNY, // 0
KYLE, // 1
STAN, // 2
BUTTERS, // 3
CARTMAN, // 4
WENDY, // 5
MAX_STUDENTS // 6
};
int main()
{
int testScores[StudentNames::MAX_STUDENTS]; // allocate 6 integers
testScores[StudentNames::STAN] = 76;
}
然后又修正为:
namespace StudentNames
{
enum StudentNames
{
KENNY, // 0
KYLE, // 1
STAN, // 2
BUTTERS, // 3
CARTMAN, // 4
WENDY, // 5
MAX_STUDENTS // 6
};
}
int main()
{
int testScores[StudentNames::MAX_STUDENTS]; // allocate 6 integers
testScores[StudentNames::STAN] = 76;
}
因为,枚举在内部被实现为整数。为什么第二种情况会报错?
添加命名空间如何纠正它?
【问题讨论】:
-
我没有使用命名空间 StudentNames
-
这段代码我还没写。来自 learncpp.com @Ajay。
-
嗯,请阅读 rici 的回答,据我所知,我认为他所说的是正确的。