Перечисления в C ++ - PullRequest
       47

Перечисления в C ++

0 голосов
/ 02 декабря 2010

У меня есть код

void switchstate(gamestates state) --line 53
{ --line 54
    switch(state)
    case state_title:
        title();
        break;
    case state_about:
        break;
    case state_game:
        break;
    case state_battle:
        break;
}

enum gamestates
{
state_title, state_about, state_game, state_battle,
};


int main( int argc, char* args[] )
{
gamestates currentstate = state_title;
startup();
load_resources();
switchstate(currentstate); --line 169
return 0;
}

и когда я пытаюсь скомпилировать, я получаю ошибки:

\ main.cpp: 53: ошибка: 'gamestates' не было объявлено в этой области
\ main.cpp: 54: ошибка: ожидается ',' или ';' до '{' токена
\ main.cpp: в функции 'int SDL_main (int, char **)':
\ main.cpp: 169: ошибка: «switchstate» не может использоваться как функция

Я никогда не использовал перечисления раньше, поэтому я запутался в том, что не работает.

Ответы [ 6 ]

3 голосов
/ 02 декабря 2010

Как правило, ошибки «<symbol> not in scope» означают, что компилятор еще не видел <symbol>.Поэтому переместите объявление gamestates до void switchstate(...), либо с помощью более раннего #include, либо просто переместив его вверх в файле.

C и C ++ компилируются сверху вниз, чтобы символы были объявленыпрежде чем они будут использованы.

2 голосов
/ 02 декабря 2010

Переместите объявление перечисления так, чтобы оно было выше функции switchstate. Это должно делать свое дело. C ++ очень требователен к порядку вещей, которые объявляются.

0 голосов
/ 02 декабря 2010

В C ++ вы должны объявить все ваши типы, прежде чем сможете ссылаться на них.Здесь вы объявляете свое перечисление после функции switchstate, поэтому, когда компилятор C ++ читает switchstate, он видит, что вы ссылаетесь на тип, который он еще не знает, и выдает ошибку.Если вы переместите объявление enum перед switchstate, у вас все будет в порядке.

В общем случае вы должны помещать объявления в начало вашего файла или в отдельные заголовочные файлы, которые вы включаете в начало файла.1003 *

0 голосов
/ 02 декабря 2010

Вы можете определить enum перед функцией switchstate.

0 голосов
/ 02 декабря 2010

Попробуйте переместить определение игровых состояний выше определения функции switchstate.

0 голосов
/ 02 декабря 2010

Перемещение строки enum gamestates в файле до состояния переключателя.

...