c错误:大小写标签未减少为整数常量

c错误:大小写标签未减少为整数常量,c,switch-statement,sdl,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=e

这是与错误有关的开关情况:

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;
            }

        }
开关(事件类型)
{
案例SDL_退出:

对于(int i=0;i您的
case
标签,如
SDL\u Quit/SDL\u MOUSEMOTION…
不能是整数常量。例如,如果它们是字符标签,但不是像
const char*
字符串文字这样的非整数常量,则有效。

您的
case
标签,如
SDL\u Quit/SDL\u MOUSEMOTION.
不能是整型常量。例如,如果它们是字符标签,但不是非整型常量的
const char*
字符串文字,则有效。

您使用的是函数
void SDL\u Quit(void)
,而不是第3行的
SDL\u Quit
事件类型

case SDL_Quit:
     ^^^^^^^^
        for (int i=0;i<NUMMENU;i++)
            SDL_FreeSurface(menus[i]);
        return 1;
案例SDL\u退出:
^^^^^^^^

对于(int i=0;i您使用的是函数
void SDL\u Quit(void)
,而不是第3行的
SDL\u Quit
事件类型

case SDL_Quit:
     ^^^^^^^^
        for (int i=0;i<NUMMENU;i++)
            SDL_FreeSurface(menus[i]);
        return 1;
案例SDL\u退出:
^^^^^^^^

对于(int i=0;i您是否尝试过将变量
i
的声明移到case语句之外
SDL_xxx
可能是常量变量而不是宏,并且这些变量不允许用作case标签。可能重复的变量应该是
SDL_QUIT
。您是否尝试过移动变量
i的声明
案例之外的语句
SDL\u xxx
可能是常量变量而不是宏,这些变量不允许用作案例标签。可能是重复的,可能是
SDL\u QUIT
。这就是我怀疑的(见我的评论)但我不熟悉SDL。感谢您为我的答案提供正确的信息。这是我怀疑的(请参阅我的评论),但我不熟悉SDL。感谢您为我的答案提供正确的信息。