我一直在使用allegro 5库来开发C ++游戏一段时间。今天我遇到了一些奇怪的错误:
我有一个名为level
的班级。我有一个名为levelhandler
的头文件。
这是它的外观:
#pragma once
#include "level.h"
level level_1;
level *currentlevel;
void initialize_levels()
{
currentlevel = &level_1;
}
当我尝试编译它时,给我一些奇怪的错误,如:
error C2086: 'int level' redefinition
error C2143: syntax error : missing ; before 'level_1'
我记得它之前可以编译,并且我很多次使用currentlevel->Player.X
,但是现在我有很多这样的错误,并且会出现这样的错误:
error C2227: left of '->Player' must point to a class/struct/generic type
error C4430: missing type specifier - int assumed
标题
#pragma once
#include "entity.h"
// some more includes
class level {
public:
enum Tileset { ... };
enum Tile { ... };
int tiles[200][200];
player Player;
level(void);
~level(void);
};
答案 0 :(得分:0)
只要查看“错误列表”窗格,就很难找到这样的错误。选择“查看/输出”以显示“输出”视图。错误C2086之后的行显示了级别的原始定义。
你填写找到
int level;
就像C2086告诉你的那样。如果是行
level level_1;
在第一个示例中,您必须检查编译单元中的最后一个头文件。它可能以int
结尾,或者它具有不平衡的#if
子句。
使用Short, Self Contained, Correct (Compilable), Example查找确切的位置。这有助于您找到错误并节省其他水晶球的时间。
编辑:
找到此意外行为的原因的另一种方法是查看预处理器输出。将C / C ++ / Preprocessor项目属性页中的Generate Preprocessed File
选项设置为 With line numbers (/P)
,并查看生成的<sourcefile>.i
检查该level.h文件是否包含了您的意图。
答案 1 :(得分:0)
好的,所以我周末一直在修补我的项目,我终于发现了什么问题给了我这么多奇怪的编译器错误。似乎我有很多情况下两个头文件相互包含,编译器真的不喜欢它,所以我纠正了,现在我没事。谢谢大家帮助我,祝你有个美好的一天!