Не съм сигурен какъв е правилният синтаксис за използване на енумите на C. Имам следния код:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Но той не се компилира със следната грешка:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
Какво правя погрешно?
Декларирането на променлива enum се извършва по следния начин:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
Въпреки това можете да използвате typedef
, за да съкратите декларациите на променливите, както следва:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Добре е да имате конвенция за именуване, за да разграничавате типовете и променливите:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Когато казвате
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
вие създавате една променлива от инстанция, наречена 'strategy' на безименен енум. Това не е много полезно - трябва ви типово определение:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
Струва си да се спомене, че в C++ можете да използвате "enum", за да дефинирате нов тип, без да е необходима декларация typedef.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Намирам този подход за много по-приятелски.
[Редактиране - изяснен статус на C++ - първоначално го бях включил, после го премахнах!]