好的,我知道这可能很难看,但是我无法理解为什么我无法使用TILES_X
,TILES_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来解决。
答案 0 :(得分:4)
按6.6,第6段:
整型常量表达式应具有整数类型,并且只能有操作数 它是整数常量,枚举常量,字符常量,sizeof 结果为整数常量的表达式,以及浮点数常量 立即操作演员阵容。仅在整数常量表达式中转换运算符 将算术类型转换为整数类型,但作为sizeof的操作数的一部分除外 操作
(强调我的)
在大多数情况下,您不能在整数常量表达式中使用浮点(这是数组维度所必需的)。
在任何情况下,为此目的使用浮点几乎肯定是错误的。切换到使用整数数学,一切都会正常工作。
修改例如,您应该乘以866然后除以1000,而不是乘以0.866f
。