Compartir a través de


Advertencia C26828

Los distintos tipos de enumeración tienen valores superpuestos. ¿Quería usar otra constante de enumeración aquí?

Comentarios

La mayoría de las veces, un único tipo de enumeración describe todas las marcas de bits que puede usar para una opción. Si usa dos tipos de enumeración diferentes que tienen valores superpuestos en la misma expresión bit a bit, es muy probable que esos tipos de enumeración no se hayan diseñado para usarse conjuntamente.

Nombre del análisis de código: MIXING_OVERLAPPING_ENUMS

Ejemplo

El código de ejemplo siguiente provoca la advertencia 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?
}

Para corregir la advertencia, asegúrese de que los tipos de enumeración diseñados para usarse conjuntamente no tienen valores superpuestos. O bien, asegúrese de que todas las opciones relacionadas estén en un único tipo de enumeración.

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

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

Consulte también

C26813
C26827