为什么这段代码不能编译,我该怎么做才能编译?
#include <iostream>
using namespace std;
enum class myEnum : unsigned int
{
bar = 3
};
int main() {
// your code goes here
unsigned int v = 2;
switch(v)
{
case 2:
break;
case myEnum::bar:
break;
}
return 0;
}
ideone:
prog.cpp: In function 'int main()':
prog.cpp:18:16: error: could not convert 'bar' from 'myEnum' to 'unsigned int'
case myEnum::bar:
未能在GCC和Clang中建立,在MSVC 2013中有效。
答案 0 :(得分:12)
enum class
的整个目的是使其成员无法直接与int
进行比较,表面上提高了C ++ 11相对于C ++的类型安全性03 。从class
删除enum class
,这将编译。
引用Bjarne勋爵:
(An)
enum class
(作用域枚举)是enum
,其中枚举数在枚举范围内,并且不提供对其他类型的隐式转换。
答案 1 :(得分:4)
你可以简单地使用这样的语法:
enum class Test { foo = 1, bar = 2 };
int main()
{
int k = 1;
switch (static_cast<Test>(k)) {
case Test::foo: /*action here*/ break;
}
}
答案 2 :(得分:2)
继续使用enum class
的替代方法是添加一个代表值为myEnum
的新字段。然后,您可以将unsigned int v
更改为myEnum v
。
enum class myEnum : unsigned int
{
foo = 2,
bar = 3
};
int main() {
myEnum v = myEnum::foo;
switch(v)
{
case myEnum::foo:
break;
case myEnum::bar:
break;
}
}
答案 3 :(得分:-1)
使用类并切换大小写的枚举的示例,这是从另一个类调用枚举类的正确方法。
class MyClass
{
public:
enum class colors {yellow , blue , green} ;
};
int main ()
{
Myclass::colors c = Myclass::colors::yellow;
switch(c)
{
case Myclass::colors::yellow:
cout <<"This is color yellow \n"
case Myclass::colors::blue:
cout <<"This is color blue\n"
}
return 0 ;
}