C enum'larını kullanmak için doğru sözdiziminin ne olduğundan emin değilim. Aşağıdaki koda sahibim:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Ancak bu, aşağıdaki hata ile derlenmez:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
Neyi yanlış yapıyorum?
Bir enum değişkeni bildirmek şu şekilde yapılır:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
Ancak, değişken bildirimlerini kısaltmak için aşağıdaki gibi bir typedef
kullanabilirsiniz:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Türler ve değişkenler arasında ayrım yapmak için bir adlandırma kuralına sahip olmak iyi bir fikirdir:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Söylediğinizde
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
isimsiz bir enum için 'strategy' adında tek bir örnek değişken oluşturursunuz. Bu çok kullanışlı bir şey değildir - bir typedef'e ihtiyacınız vardır:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
C++'da typedef deyimine ihtiyaç duymadan yeni bir tip tanımlamak için "enum" kullanabileceğinizi belirtmek gerekir.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Bu yaklaşımı çok daha dostane buluyorum.
[düzenleme - C++ durumunu netleştirdim - bunu ilk başta koymuştum, sonra kaldırdım!]