Тарк - лучший ответ.
Большая часть обсуждения перечисления - красная сельдь.
Сравнить этот фрагмент кода: -
int strategy;
strategy = 1;
void some_function(void)
{
}
, что дает
error C2501: 'strategy' : missing storage-class or type specifiers
error C2086: 'strategy' : redefinition
с этим, который компилируется без проблем.
int strategy;
void some_function(void)
{
strategy = 1;
}
Переменная strategy
должна быть установлена при объявлении или внутри функции и т. Д. Вы не можете писать произвольное программное обеспечение - в частности, назначения - в глобальной области видимости.
Тот факт, что он использовал enum {RANDOM, IMMEDIATE, SEARCH} вместо int, имеет отношение только к той степени, в которой он запутал людей, которые не могут видеть за его пределами.
Сообщения об ошибках переопределения в вопросе показывают, что автор поступил неправильно.
Так что теперь вы должны понять, почему первый из приведенных ниже примеров неправильный, а остальные три в порядке.
Пример 1. НЕПРАВИЛЬНО!
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
void some_function(void)
{
}
Пример 2. ПРАВО.
enum {RANDOM, IMMEDIATE, SEARCH} strategy = IMMEDIATE;
void some_function(void)
{
}
Пример 3. ПРАВО.
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
void some_function(void)
{
strategy = IMMEDIATE;
}
Пример 4. ПРАВО.
void some_function(void)
{
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
}
Если у вас есть работающая программа, вы можете просто вставить эти фрагменты в вашу программу и увидеть, что некоторые компилируются, а некоторые нет.