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

最佳答案

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)

10-06 06:21