2012-03-13 79 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' 

順便說一句,TILE是16號。

無論如何,我不知道如何解決這個問題。我在幾個地方查了一下,但似乎無法找到答案。有人可以解釋這裏發生了什麼問題嗎?請不要低調。我合法地無法在網上找到解決方案。

回答

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

相關問題