我有以下代码,为什么Visual Studio位于{
中的第一个括号playerObj.cropImg = { 0, 0, 45, 32 };
下面并在编译时返回错误error C2059: syntax error : '{'
?
#include <SDL.h>
#include <stdio.h>
typedef struct obj
{
SDL_Surface *pSprite;
SDL_Texture *pTexture;
SDL_Rect cropImg;
SDL_Rect pos;
} obj;
obj playerObj;
void playerObj_init(unsigned char * filename, SDL_Renderer * pRenderer)
{
playerObj.cropImg = { 0, 0, 45, 32 };
}
答案 0 :(得分:3)
您的代码尝试分配。
初始化是指为变量提供值作为声明的一部分。
分配是指为已存在的变量提供新值;这发生在语句(不是声明)中。
在C90中,大括号括起的初始值设定项只能用于声明。在C99中,您可以使用struct类型的文字,但是您必须将类型指定为语法的一部分(编译器尝试推导它会太复杂):
playerObj.cropImg = (SDL_Rect) { 0, 0, 45, 32 };
在C90中有效的另一种方法是写:
SDL_Rect const newRect = { 0, 0, 45, 32 };
playerObj.cropImg = newRect;
并且编译器应该优化它。
NB。考虑使用指定的初始化程序来帮助实现代码可维护性。在任何一种情况下,
{ .w = 45, .h = 32 }