为什么会返回:初始化程序太多了?

时间:2012-03-13 07:21:57

标签: struct sdl

好的,直截了当,这是代码:

    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号。

无论如何,我不知道如何解决这个问题。我在几个地方查了一下,但似乎找不到答案。谁能解释这里出了什么问题?请不要贬低。我合法地无法在网上找到解决方案。

1 个答案:

答案 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[];)。