Почему он возвращается: слишком много инициализаторов? - PullRequest
0 голосов
/ 13 марта 2012

Хорошо, прямо в точку, вот код:

    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 голосов
/ 13 марта 2012

Вы объявили массив из 0 элементов, поэтому вы не можете его инициализировать ни с чем.Помимо массивов нулевого размера есть расширение GNU C - если это действительно то, что вам нужно, и если эта структура должна быть размещена в стеке / глобальном месте - вам нужно вручную создать панель памяти с достаточным размером:

unsigned char tiles_memory_pad[sizeof(SDL_Rect) * NUM_TILES];
struct TileStruct *tiles = (struct TileStruct*)tiles_memory_pad;

Или используйте динамический распределитель памяти в том же порядке (опять же, если это то, что вам нужно).Кстати, в то время как массивы нулевого размера специфичны для GNU, нестандартные массивы являются стандартными для C99 и более поздних версий (объявлены как int some_array[]; в структуре).

...