c错误:case标签不会减少为整数常量

时间:2015-01-21 15:12:58

标签: c switch-statement sdl

这是错误所关注的开关案例:

switch(event.type)
        {
        case SDL_Quit:
            for (int i=0;i<NUMMENU;i++)
                SDL_FreeSurface(menus[i]);
            return 1;

        case SDL_MOUSEMOTION:
            x=event.motion.x;
            y=event.motion.y;
            for(int i=0;i<NUMMENU;i++)
            {
                if(x>=position[i].x && x<=position[i].x+position[i].w && y>=position[i].y && y<=position[i].y+position[i].h)
                    {
                    if(!selected[i])
                    {
                        selected[i]=1;
                        SDL_FreeSurface(menus[i]);
                        menus[i]=TTF_RenderText_Solid(font,labels[i],color[1]);
                    }
                }else{
                        if(selected[i])
                        {
                            selected[i]=0;
                            SDL_FreeSurface(menus[i]);
                            menus[i]=TTF_RenderText_Solid(font,labels[i],color[0]);
                        }
                      }
            }

        case SDL_MOUSEBUTTONDOWN:
            x=event.button.x;
            y=event.button.y;
            for(int i=0;i<NUMMENU;i++)
                if(x>=position[1].x && x<=position[1].x+position[i].w && y>=position[i].y && y<=position[i].y+position[i].h)
                {
                    for(int j=0;j<NUMMENU;j++)
                        SDL_FreeSurface(menus[j]);
                    return i;
                }
                break;
        case SDL_KEYDOWN:
            if(event.key.keysym.sym==SDLK_ESCAPE)
            {
                for(int i=0;i<NUMMENU;i++)
                    SDL_FreeSurface(menus[i]);
                return 0;
            }

        }

我有这个错误,我不知道为什么以及如何解决这个问题。我试图添加休息;在每个案件的最后但没有结果。

如果您需要更多代码或更多信息,我可以给予精确度。

此致

2 个答案:

答案 0 :(得分:5)

您使用的是void SDL_Quit(void)功能,而不是第3行的SDL_QUIT事件类型。

case SDL_Quit:
     ^^^^^^^^
        for (int i=0;i<NUMMENU;i++)
            SDL_FreeSurface(menus[i]);
        return 1;

答案 1 :(得分:0)

您的case标签(例如SDL_Quit/SDL_MOUSEMOTION...)不能是整数常量。例如,如果它们是字符标签,则它是有效的,但不是像const char *字符串文字那样不是整数常量的字符串。