C:在" struct name2之前的错误预期表达式

时间:2017-11-20 21:34:06

标签: c

这里是" 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 ...

1 个答案:

答案 0 :(得分:1)

如评论中所述,您无法在Spriteif的主体中有用地创建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);

考虑在调用代码中创建变量xspeedyspeed,并将一个设置为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);