枚举类型错误 C2677
Enum type error C2677
我的问题是,我在 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)]);
我的问题是,我在 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)]);