не может инициализировать переменную типа 'designFlags' значением r типа 'int' - PullRequest
2 голосов
/ 17 мая 2019

я пытаюсь создать флаг enum, который бы видел, если определенная вещь была выделена жирным шрифтом и курсивом, но я получаю ошибку компиляции: ошибка: не могу инициализировать переменную типа 'designFlags' с rvalue типа 'int' designFlagsmyDesign = BOLD |UNDERLINE;

#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 Ответ

2 голосов
/ 17 мая 2019

Стандарт 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)
...