Jeg er ikke sikker på hva som er riktig syntaks for bruk av C enums. Jeg har følgende kode:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Men den lar seg ikke kompilere, og jeg får følgende feilmelding:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
Hva gjør jeg feil?
Slik deklarerer du en enum-variabel:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
Du kan imidlertid bruke en typedef
for å forkorte variabelserklæringene, for eksempel slik:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Det er lurt å ha en navnekonvensjon for å skille mellom typer og variabler:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Når du sier
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
oppretter du en enkelt forekomstvariabel, kalt 'strategy' av en navnløs enum. Dette er ikke særlig nyttig - du trenger en typedef:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
Det er verdt å nevne at i C++ kan du bruke "enum" til å definere en ny type uten å bruke en typedef-setning.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Jeg synes denne tilnærmingen er mye mer brukervennlig.
[edit - klargjort C++-status - jeg hadde dette med opprinnelig, men fjernet det].