2013-06-04 2 views
1

В этой части кода есть ошибка. В нем говорится:Ошибка проверки времени выполнения # 3 - переменная 'direct' используется без инициализации

«Ошибка проверки выполнения» № 3 - переменная «direct» используется без инициализации ».

Как исправить эту ошибку?

bool loop=true; 
int direct; 

al_install_keyboard(); 

ALLEGRO_TIMER *timer = al_create_timer (0.4); 
ALLEGRO_EVENT_QUEUE *keystroke = al_create_event_queue(); 
al_register_event_source(keystroke ,al_get_keyboard_event_source()); 
al_register_event_source (keystroke , al_get_timer_event_source(timer)); 
al_start_timer(timer); 

do{ 
    ALLEGRO_EVENT input; 
    al_wait_for_event(keystroke , &input); 
    if (input.type == ALLEGRO_EVENT_KEY_DOWN){ 
     switch(input.keyboard.keycode){ 
     case ALLEGRO_KEY_DOWN: direct=DOWN; break; 
     case ALLEGRO_KEY_UP : direct=UP;break; 
     case ALLEGRO_KEY_LEFT: direct=LEFT;break; 
     case ALLEGRO_KEY_RIGHT: direct=RIGHT;break; 
     case ALLEGRO_KEY_ESCAPE: loop= false; 
     } 
    } 

    if(input.type==ALLEGRO_EVENT_TIMER){ 
     switch(direct){ 
     case DOWN: moove_snake(DOWN) ; break; 
     case UP: moove_snake(UP) ; break; 
     case LEFT: moove_snake(LEFT) ; break; 
     case RIGHT: moove_snake(RIGHT) ; break; 
     } 
    } 

}while (loop); 

ответ

8

инициализировать его :)

int direct = 0; 
+0

Я пытался, но это не помогло –

+3

@AbrahamyanSamvel Это не верно. –

+1

Это поможет. Попробуй еще раз. – Nicholaz

1

Если вы пытались инициализировать его, и он не работает, то скорее всего, у вас есть проблема в другом месте в коде, что анализатор просто происходит сбой на этом линия. Посмотрите выше линии int direct;.

Убедитесь, что все ваши фигурные скобки совпадают, у вас есть полуколоны на концах линий и что все остальное в целом выглядит хорошо.

Если вы не нашли его, прокомментируйте все, начиная с int direct; и идите оттуда.

+0

все в порядке. Я скомпилировал один и тот же код много раз без ошибок. Я попытался прокомментировать все, начиная с int direct = 0; и даже после этого возникает одна и та же ошибка. Кажется, мой компилятор сходит с ума :) –

+0

Какая версия этого компилятора? Я вернусь к последним изменениям, которые вы сделали, прежде чем он начал жаловаться и прокомментировать их. Если это не обнаружено, прокомментируйте ВСЕ, кроме минимальных голых костей с включенной строкой 'int direct = 1234;'. Конечно, ваш компилятор недостаточно глуп, чтобы сказать 'int direct = 1234;' неинициализирован. :-) – kmort

+0

Я просто исправил эту проблему, скопировав код и вставив его в новый проект :) –

3

Если первое условие if if (input.type == ALLEGRO_EVENT_KEY_DOWN) является ложным, а второе if(input.type==ALLEGRO_EVENT_TIMER) верно, вы используете switch с неинициализированной переменной (int direct). Это означает, что переменная указывает на случайные биты в памяти, и ваш компилятор не любит этот факт.

Это легко исправить, инициализируя переменную в начале. Например: int direct = UP;

0

ПРОЧИТАЙТЕ ВНИМАТЕЛЬНО !! Когда появится сообщение, перед закрытием приложения вам нужно выбрать break вместо продолжения. Если он по-прежнему не работает, поставить статический метод перед переменной, как

static int direct; 

 Смежные вопросы

  • Нет связанных вопросов^_^