2012-03-13 4 views
0

Хорошо, прямо в точку, вот код:Почему он возвращается: слишком много инициализаторов?

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' 

Btw, TILE является число 16.

Во всяком случае, я не уверен, как это исправить. Я искал его в нескольких местах, но, похоже, не нашел ответа. Может кто-нибудь объяснить, что здесь не так? Не делайте ниспровержения, пожалуйста. Я законно не мог найти решение в сети.

ответ

0

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

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

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

Смежные вопросы