1

我用过:

typedef struct entity {
    int health;
    int damage;
    SDL_Rect hitbox;
} player, basicEnemy[10];

处理我的玩家(和敌人)。我的问题是我得到:

error: expected unqualified-id before '-' token

对于这一行(和一个类似的):

if( keystate[SDLK_LEFT] )  player.hitbox.x -= 1;

我该如何解决?如果我在结构上没有 typedef,则不会发生错误,但会发生另一个错误(这就是为什么我让它有 typedef)

标题:

#include "SDL.h"
#include "SDL\SDL.h"
#include <string>
4

3 回答 3

2

typedef定义一个类型别名。通过说:

typedef struct entity {
    // ...
} player, basicEnemy[10];

你是说:

struct entity {
    // ...
};

typedef entity player;          // 'player' is an alias for 'entity'.
typedef entity basicEnemy[10];  // 'basicEnemy' is an alias for 'entity[10]'.

当您真正的意思是进行struct声明和两个实例定义时:

struct entity {
    // ...
} player, basicEnemy[10];

最好将它们分开,以避免这种潜在的混淆:

struct entity {
    // ...
};

entity player, basicEnemy[10];

struct请注意,即使没有实例定义,声明后也需要分号。

于 2013-07-18T02:47:54.197 回答
1
typedef struct entity {
    int health;
    int damage;
    SDL_Rect hitbox;
} playerType, enemyType;
playerType player;
enemyType basicEnemy[10];

这解决了问题

于 2013-07-18T03:04:58.737 回答
0

您很可能hitbox在包含的某些头文件中意外定义了一些宏(也许?),这会在扩展时导致语法错误。

尝试通过预处理器运行您的代码并查看预处理后的输出。对于 GCC 和 GCC 兼容的编译器,这可以通过传递-E命令行标志而不是-c. 例如:

g++ myfile.cpp -E -o myfile.ii

.ii是预处理 C++ 文件的推荐文件扩展名,但不是必需的。看看那个文件,看看你得到错误的那一行发生了什么。

使用 Visual Studio,您将改为使用/P选项. 对于其他编译器,请查看编译器的文档以了解如何查看预处理输出。

于 2013-07-18T02:26:15.037 回答