我正在尝试创建一个枚举标志,以查看某件事是否为粗体和斜体,但是我遇到了编译错误: 错误:无法使用“ int”类型的右值初始化“ designFlags”类型的变量 designFlags myDesign =粗体|下划线;
#include <iostream>
using namespace std;
enum designFlags {
BOLD = 1,
ITALICS = 2,
UNDERLINE = 4
};
int main()
{
designFlags myDesign = BOLD | UNDERLINE;
// 00000001
// | 00000100
// ___________
// 00000101
cout << myDesign;
return 0;
}
答案 0 :(得分:2)
C ++标准阻止您执行从int
到enum
的隐式转换(注意:允许从enum
到int
的隐式转换)。
但是,您可以改为执行静态投射:
designFlags myDesign = static_cast<designFlags>(BOLD | UNDERLINE);
cout << myDesign; // prints 5
请记住,结果很像不是designFlags
中指定的值之一。这通常是一种常见的做法,但是您必须依靠按位操作才能进行比较:
例如:
// wrong
if (myDesign == BOLD)
// ok (most of the time)
if (myDesign & BOLD)
// always ok
if ((myDesign & BOLD) == BOLD)