Поделиться через


Предупреждение C26828

Разные типы перечисления имеют перекрывающиеся значения. Вы хотите использовать еще одну константу перечисления здесь?

Замечания

В большинстве случаев один тип перечисления описывает все битовые флаги, которые можно использовать для параметра. Если вы используете два разных типа перечисления, которые имеют перекрывающиеся значения в одном битовом выражении, вероятность того, что эти типы перечисления не были предназначены для совместного использования.

Имя анализа кода: MIXING_OVERLAPPING_ENUMS

Пример

Следующий пример кода вызывает предупреждение C26828:

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

enum class BitWiseB
{
    AA = 1,
    BB = 2,
    CC = 4,
    All = 7
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseB::AA; // Warning C26828: Different enum types have overlapping values. Did you want to use another enum constant here?
}

Чтобы исправить предупреждение, убедитесь, что типы перечислений, предназначенные для совместного использования, не имеют перекрывающихся значений. Или убедитесь, что все связанные параметры находятся в одном типе перечисления.

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseA::A; // No warning.
}

См. также

C26813
C26827