No estoy seguro de cuál es la sintaxis adecuada para utilizar los enums de C. Tengo el siguiente código:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Pero esto no compila, con el siguiente error:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
¿Qué estoy haciendo mal?
La declaración de una variable enum se hace así:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
Sin embargo, se puede utilizar un typedef
para acortar las declaraciones de variables, así:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Tener una convención de nombres para distinguir entre tipos y variables es una buena idea:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Cuando dices
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
creas una única variable de instancia, llamada 'estrategia' de un enum sin nombre. Esto no es una cosa muy útil para hacer - usted necesita un typedef:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
Vale la pena mencionar que en C++ se puede utilizar "enum" para definir un nuevo tipo sin necesidad de una declaración typedef.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Encuentro este enfoque mucho más amigable.
[edit - clarificado el estado de C++ - ¡tenía esto originalmente, luego lo eliminé!]