2011-06-12 1 views
1

[OK]を、私はこれは一体として、おそらく醜いです理解し、私はGCCは、それが「可変ファイルスコープで修正された」あることについて泣いて、はなぜ私はグローバル配列の長さなどTILES_XTILES_YまたはTILES_TOTALを使用することはできません理解することはできません。可変的に変更されていますが、間違っていますか?

/* How many points should be in each tile? */ 
    /* NOTE: MUST BE POWER OF TWO */ 
    #define TILE_WIDTH 32 
    #define TILE_HEIGHT TILE_WIDTH 
    #define TILE_AREA (TILE_WIDTH * TILE_HEIGHT) 

    /* How far should the origin of each tile be spaced? */ 
    #define TILE_OFFSET_X TILE_WIDTH 
    #define TILE_OFFSET_Y (TILE_HEIGHT * 0.866f) 

    /* Relative to the origin, where does the tile really end? */ 
    #define TILE_MIN_X 0.0f 
    #define TILE_MIN_Y 0.0f 
    #define TILE_MAX_X (TILE_OFFSET_X + 0.5f) 
    #define TILE_MAX_Y (TILE_OFFSET_Y + 0.5f) 

    /* How many tiles should be cached offscreen? */ 
    #define TILE_BLEED 2 

    #define CAMERA_WIDTH 256.0f 
    #define CAMERA_HEIGHT 192.0f 

    #define TILES_X ((size_t) ((float) ((CAMERA_WIDTH * 2.0f) + (TILE_BLEED * (TILE_WIDTH + TILE_WIDTH)))/(float) TILE_OFFSET_X)) 
    #define TILES_Y ((size_t) ((float) ((CAMERA_HEIGHT * 2.0f) + (TILE_BLEED * (TILE_HEIGHT + TILE_HEIGHT)))/(float) TILE_OFFSET_Y)) 
    #define TILES_TOTAL (TILES_X * TILES_Y) 

TILES_X expands to: 
    ((size_t) ((float) ((256.0f * 2.0f) + (2 * (32 + 32)))/(float) 32)) 

これは定数と評価する必要がありますか?つまり、そこには何も変わりません。この初期化子で変数を定義しようとすると、変数がどのように変更されているのか再び泣いてしまいます。私はどのように表示されません。同じエラーに関する他の記事がありますが、const intの代わりにenumまたはdefineを使用して解決されています。 6.6パー

+2

割るあなたは、コンパイラが実際に文句のコードを投稿できますか? – Mat

答えて

4

、段落6:

整数定数式が整数型でなければならないし、結果のみ整数定数です 表現のsizeof整数定数、列挙定数、文字定数、あるオペランド を持たなければなりません、浮動定数は、の の即値オペランドです。整数定数式のキャスト演算子は、 演算子のサイズに対するオペランドの一部を除いて、算術型を整数型に変換するものに過ぎないものとする。

(強調鉱山)

ます(配列の次元のために必要とされる)整数の定数式に浮動小数点を使用することができないほとんどの部分について。

いずれにしても、この目的のために浮動小数点を使用するのは間違いです。整数演算を使用するように切り替えると、すべて正常に動作します。

編集:たとえば、代わりに0.866fを掛けるの、あなたは866を掛けなければならないし、その後1000

+0

Okですが、整数除算は27.712ではなく27の整数に評価されるため、動作しないコンテキストでは、実際のタイルの高さです。だから私は浮動小数点を使用しています。それは要件なので。 – nexekho

+0

これは必須条件ではありません。数学を知っていると仮定して、整数ではできない浮動小数点でできることは何もありません。あなたは私が何を説明したよりもいくつかのより広範な変更を加える必要があります。 –

+0

私は六角形の1x1px円のタイルを使って作業しています。不等な間隔や円を歪ませることなく、タイルの高さは幅が866でなければなりません。 – nexekho

関連する問題