I'm nicht sicher, was ist die richtige Syntax für die Verwendung von C Enums. Ich habe den folgenden Code:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Aber das lässt sich nicht kompilieren, mit dem folgenden Fehler:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
Was mache ich falsch?
Die Deklaration einer Enum-Variable wird wie folgt durchgeführt:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
Sie können jedoch ein typedef
verwenden, um die Variablendeklarationen zu verkürzen, etwa so:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Es ist eine gute Idee, eine Namenskonvention zu haben, um zwischen Typen und Variablen zu unterscheiden:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Wenn Sie sagen
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
sagen, erzeugen Sie eine einzelne Instanzvariable namens 'strategy' einer namenlosen Aufzählung. Das ist nicht sehr sinnvoll - Sie brauchen ein Typedef:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
Es ist erwähnenswert, dass man in C++ "enum" verwenden kann, um einen neuen Typ zu definieren, ohne eine typedef-Anweisung zu benötigen.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Ich finde diesen Ansatz sehr viel freundlicher.
[edit - C++ Status geklärt - ich hatte das ursprünglich drin, habe es dann entfernt].