C++ SDL 在"-"令牌之前出现非限定 ID
C++ SDL Expected unqualified-id before '-' token
我使用过:
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 "SDLSDL.h"
#include <string>
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
声明没有进行实例定义,也需要在声明之后使用分号。
typedef struct entity {
int health;
int damage;
SDL_Rect hitbox;
} playerType, enemyType;
playerType player;
enemyType basicEnemy[10];
这解决了
您很可能在包含的某个头文件中意外定义了某个宏(可能是hitbox
?),这会导致展开时出现语法错误。
试着通过预处理器运行代码并查看预处理后的输出。对于GCC和GCC兼容的编译器,这可以通过传递-E
命令行标志而不是-c
来实现。例如:
g++ myfile.cpp -E -o myfile.ii
.ii
是预处理C++文件的推荐文件扩展名,但不是必需的。看看那个文件,看看你得到错误的那一行发生了什么。
对于Visual Studio,您应该使用/P
选项。对于其他编译器,请查看编译器的文档,了解如何查看预处理的输出。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- SDL 窗口不会弹出
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- SDL 操纵杆按钮按下/C++
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- SDL 应用程序错误:“if”之前应为非限定 id
- C++ SDL 在"-"令牌之前出现非限定 ID