Warnung C26828

Unterschiedliche Enumerationstypen weisen überlappende Werte auf. Möchten Sie hier eine weitere Enumerationskonstante verwenden?

Hinweise

Meistens beschreibt ein einzelner Enumerationstyp alle Bitkennzeichnungen, die Sie für eine Option verwenden können. Wenn Sie zwei verschiedene Enumerationstypen verwenden, die überlappende Werte im selben bitweisen Ausdruck aufweisen, sind die Chancen gut, dass diese Enumerationstypen nicht für die gemeinsame Verwendung entwickelt wurden.

Codeanalysename: MIXING_OVERLAPPING_ENUMS

Beispiel

Der folgende Beispielcode verursacht Warnungen 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?
}

Um die Warnung zu beheben, stellen Sie sicher, dass enumerationstypen, die für die Verwendung vorgesehen sind, keine überlappenden Werte aufweisen. Oder stellen Sie sicher, dass sich alle zugehörigen Optionen in einem einzelnen Enumerationstyp befinden.

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

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

Siehe auch

C26813
C26827