这里是" sprite.h"
中结构的声明typedef struct {
int x,y; /**< current sprite position */
int width, height; /**< sprite dimensions */
int xspeed, yspeed; /**< current speeds in the x and y direction */
char *map; /**< the sprite pixmap (use read_xpm()) */
} Sprite;
这里是我们使用它们的代码片段,在我们包含标题的单独源文件中。
Sprite *create_sprite(char *pic[], int x, int y, int xspeed, int yspeed) {
//allocate space for the "object"
Sprite *sp = (Sprite *) malloc ( sizeof(Sprite));
if( sp == NULL )
return NULL;
// read the sprite pixmap
sp->map = read_xpm(pic, &(sp->width), &(sp->height));
if( sp->map == NULL ) {
free(sp);
return NULL;
}
else
{
sp->x =x;
sp->y =y;
sp->xspeed = xspeed;
sp->yspeed = yspeed;
}
return sp;
}
和
if(xi==xf)
Sprite* sp = create_sprite(xpm, xi, yi,0,speed); //error
else
Sprite* sp = create_sprite(xpm, xi, yi,speed,0); //error
最后一段代码用于我们的&#34; main&#34;功能。当我们尝试使用make
编译我们的项目时,我们在标题中得到错误,参考上面标示的表达式。 Eclipse也没有突出显示头文件之外的Sprite
...
答案 0 :(得分:1)
如评论中所述,您无法在Sprite
和if
的主体中有用地创建else
指针变量,因为该变量会立即超出范围。它等同于写这个 - 除了这会编译,但sp
/ if
之后对else
的任何引用都会失败(未定义的变量):
if (xi == xf)
{
Sprite* sp = create_sprite(xpm, xi, yi, 0, speed);
}
else
{
Sprite* sp = create_sprite(xpm, xi, yi, speed, 0);
}
最简单的解决方法是在Sprite *sp;
之前定义if
,然后在sp = create_sprite(...);
和if
的正文中进行简单的分配(else
)。
Sprite *sp;
if (xi == xf)
sp = create_sprite(xpm, xi, yi, 0, speed);
else
sp = create_sprite(xpm, xi, yi, speed, 0);
考虑在调用代码中创建变量xspeed
和yspeed
,并将一个设置为0,将一个设置为speed
,然后使用一次调用create_sprite(xpm, xi, yi, xspeed, yspeed);
,就像这样:
int xspeed = 0;
int yspeed = 0;
if (xi == xf)
yspeed = speed;
else
xspeed = speed;
Sprite *sp = create_sprite(xpm, xi, yi, xspeed, yspeed);