枚举类型错误C2677

Enum type error C2677

本文关键字:C2677 错误 类型 枚举      更新时间:2023-10-16

我的问题是,我在Button.h文件中声明了这个枚举类型:

enum ButtonEnum
    {
        BUTTON_SPRITE_MOUSE_UP_RED = 0,
        BUTTON_SPRITE_MOUSE_UP_VIOLET = 1,
        BUTTON_SPRITE_MOUSE_UP_DBLUE = 2,
        BUTTON_SPRITE_MOUSE_UP_GREY = 3,
        BUTTON_SPRITE_MOUSE_UP_DGREEN = 4,
        BUTTON_SPRITE_MOUSE_UP_LBLUE = 5,
        BUTTON_SPRITE_MOUSE_UP_LGREEN = 6,
        BUTTON_SPRITE_MOUSE_UP_YELLOW = 7,
        BUTTON_SPRITE_MOUSE_UP_EMPTY = 8,
        BUTTON_SPRITE_TOTAL = 9
    };

稍后,我声明:

ButtonEnum mCurrentSprite;

并在Button.cpp中的其他函数中使用:

void Button::render()
{
    SDLFunctions::render(mPosition.x,mPosition.y,SDLFunctions::gSpriteClips[mCurrentSprite] );
}

SDLFunctions:render看起来像:

void SDLFunctions::render( int x, int y, SDL_Rect* clip )
{
    //Set rendering space and render to screen
SDL_Rect renderQuad = { x, y, mWidth, mHeight };
//Set clip rendering dimensions
if( clip != NULL )
{
    renderQuad.w = clip->w;
    renderQuad.h = clip->h;
}
//Render to screen
SDL_RenderCopy( gRenderer, mTexture, clip, &renderQuad );
}

和SDLFunctions:gSpriteClips是这样的:

SDL_Rect gSpriteClips[ 9 ];

在另一个函数中用一些值填充。切中要害。生成程序的结果如下:错误C2677:二进制"[":找不到采用类型"Button::ButtonEnum"的全局运算符(或者没有可接受的转换)

我的问题是:到底是什么?这是怎么回事?mCurrentSprite在生成器中得到了声明的起始值,每次调用Button::render时,它都会得到一些值,而不是NULL。有人能解决吗?谢谢

您的编译器试图告诉您(以一种非常不清楚的方式)您正在使用枚举对数组进行索引。这是不允许的——枚举有整数值,但它们不是整数类型。所以你需要铸造它:

SDLFunctions::render(mPosition.x, mPosition.y,
    SDLFunctions::gSpriteClips[static_cast<size_t>(mCurrentSprite)]);