2012-03-13 9 views
0

わかりましたが、ストレートポイントに、ここでのコードは次のとおりです。なぜそれが戻っていますか:イニシャライザが多すぎますか?

too many intitializers for 'Load::Vars()::TileStruct' 

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 
     } 
    }; 

エラーがところで、TILEはとにかく数16

ですが、私はわからないんだけどこれを修正する方法。私はいくつかの場所でそれを見てきましたが、答えを見つけることができないようです。誰かがここで間違っていることを説明することはできますか?下降はしないでください。正当にネット上の解決策を見つけることができませんでした。

答えて

0

0要素の配列が宣言されているため、何も初期化できません。ゼロ・サイズの配列の横に はGNU Cの拡張である - それはあなたが必要なものを本当にだ場合、その構造は、スタック/グローバルな場所に置かなければならない場合 - あなたは手動で、十分なサイズのメモリパッドを作成する必要があります。

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

か同じメモリ内にダイナミックメモリアロケータを使用します(必要ならば)。 Btwは、サイズがゼロの配列はGNU固有のものですが、サイズ変更されていない配列はC99以降の標準です(構造内でint some_array[];と宣言されています)。

関連する問題