无法初始化类型为'int'的右值的'designFlags'类型的变量

时间:2019-05-17 19:32:57

标签: c++ enums bitwise-operators flags

我正在尝试创建一个枚举标志,以查看某件事是否为粗体和斜体,但是我遇到了编译错误: 错误:无法使用“ 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;
}

1 个答案:

答案 0 :(得分:2)

C ++标准阻止您执行从intenum的隐式转换(注意:允许从enumint的隐式转换)。

但是,您可以改为执行静态投射:

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)