es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El valor del enumerador se evalúa en 2147483648, lo que no se puede reducir al tipo ‘int’.

Creé un enum así:

enum class CATEGORIES {
    C01 = 0x00000001,
    C02 = 0x00000002,
    C03 = 0x00000004,
    ...
    C26 = 0x02000000,
    C27 = 0x04000000,
    C28 = 0x08000000,
    C29 = 0x10000000,
    C30 = 0x20000000,
    C31 = 0x40000000,
    C32 = 0x80000000 // Error en esta línea
}

El valor del enumerador se evalúa como 2147483648, lo cual no se puede reducir al tipo ‘int’.

¿Cómo puedo resolverlo? Solo quería una forma conveniente de representar las categorías, y parecía que enum class tenía sentido para la organización por espacio de nombres.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el valor enumerado para C32 es demasiado grande para el tipo de datos subyacente (int). Para resolver este problema, puede cambiar el tipo de datos de los valores subyacentes a un tipo de entero más grande, como unsigned int o long long. Por ejemplo:

    enum class CATEGORIAS{
           C01 = 0x00000001,
           C02 = 0x00000002,
           C03 = 0x00000004,
           ...
           C26 = 0x02000000,
           C27 = 0x04000000,
           C28 = 0x08000000,
           C29 = 0x10000000,
           C30 = 0x20000000,
           C31 = 0x40000000,
           C32 = 0x800000000ULL, // Use unsigned long long or uint64_t for the underlying type
        };
    

    Al usar un tipo de datos más grande, puede representar valores más grandes para sus enumeradores sin encontrar este error. Además, el uso de una clase enum le permite agrupar constantes relacionadas y proporciona seguridad de tipo, evitando asignaciones accidentales entre diferentes enumeradores u otros tipos de datos.

Comments are closed.