1

在这部分代码中是一个错误。它说

“运行时检查失败 #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);
4

4 回答 4

9

初始化它:)

int direct = 0;
于 2013-06-04T12:10:14.227 回答
3

如果第一个 if 条件if (input.type == ALLEGRO_EVENT_KEY_DOWN)为假,而第二个条件if(input.type==ALLEGRO_EVENT_TIMER)为真,则您正在使用switch未初始化的变量(int direct)。这意味着该变量指向内存中的随机位,而您的编译器不喜欢这个事实。

通过在开始时初始化变量很容易修复。例如: int direct = UP;

于 2013-06-04T13:12:46.283 回答
1

如果您尝试初始化它但它没有工作,那么您可能在代码的其他地方遇到问题,解析器恰好在这一行失败。看int direct;线以上。

检查所有花括号是否匹配,行尾是否有分号,以及其他所有内容是否正常。

如果您没有找到它,请注释掉从那里开始的所有内容int direct;并从那里开始。

于 2013-06-04T12:30:47.910 回答
0

仔细阅读!!当消息出现时,您必须在关闭应用程序之前选择中断而不是继续。如果它仍然不起作用,请将静态方法放在变量之前,例如

static int direct;
于 2017-05-20T02:02:51.833 回答