我用过:
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>
答案 0 :(得分: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
声明后,即使没有实例定义,也需要使用分号。
答案 1 :(得分:1)
typedef struct entity {
int health;
int damage;
SDL_Rect hitbox;
} playerType, enemyType;
playerType player;
enemyType basicEnemy[10];
解决了这个问题
答案 2 :(得分:0)
您很可能在某些包含的头文件中意外定义了一些宏(可能是hitbox
?),这会导致扩展时出现语法错误。
尝试通过预处理器运行代码并查看预处理的输出。使用GCC和GCC兼容的编译器,可以通过传递-E
command line flag而不是-c
来完成。例如:
g++ myfile.cpp -E -o myfile.ii
.ii
是预处理C ++文件的推荐文件扩展名,但不是必需的。看看那个文件,看看你收到错误的行发生了什么。
使用Visual Studio,您可以使用/P
option。对于其他编译器,请查看编译器的文档,了解如何查看预处理的输出。