好的,直截了当,这是代码:
struct TileStruct
{
SDL_Rect clip[0];
};
TileStruct Tiles[] =
{
{
clip[0].x = 0*TILE,
clip[0].y = 0*TILE,
clip[0].w = TILE,
clip[0].h = TILE
},
{
clip[0].x = 1*TILE,
clip[0].y = 0*TILE,
clip[0].w = TILE,
clip[0].h = TILE
},
{
clip[0].x = 0*TILE,
clip[0].y = 1*TILE,
clip[0].w = TILE,
clip[0].h = TILE
},
{
clip[0].x = 1*TILE,
clip[0].y = 1*TILE,
clip[0].w = TILE,
clip[0].h = TILE
}
};
错误
too many intitializers for 'Load::Vars()::TileStruct'
顺便说一下,TILE
是16号。
无论如何,我不知道如何解决这个问题。我在几个地方查了一下,但似乎找不到答案。谁能解释这里出了什么问题?请不要贬低。我合法地无法在网上找到解决方案。
答案 0 :(得分:0)
您已声明了一个包含0个元素的数组,因此您无法使用任何内容对其进行初始化。 除了零大小的数组之外还有GNU C扩展 - 如果它真的是你需要的,如果那个结构必须放在堆栈/全局位置 - 你必须手动创建足够大小的内存板:
unsigned char tiles_memory_pad[sizeof(SDL_Rect) * NUM_TILES];
struct TileStruct *tiles = (struct TileStruct*)tiles_memory_pad;
或者在同一个whay中使用动态内存分配器(再次,如果它需要你的话)。
顺便说一下,虽然零大小的数组是特定于GNU的,但未经过大小写的数组是C99及更高版本的标准数据(在结构中声明为int some_array[];
)。