0

一段时间以来,我一直在使用 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);
};
4

2 回答 2

0

只要查看“错误列表”窗格,就很难找到此类错误。选择查看/输出以显示“输出”视图。错误 C2086 之后的行显示了级别的原始定义。

你填找到一个

int level;

正如 C2086 告诉你的那样。如果是线

level level_1;

在您的第一个示例中,您必须检查编译单元中包含的最后一个头文件。它可能以一个int或它有一个不平衡的#if子句结尾。

要找到确切的位置,请使用简短的、自包含的、正确的(可编译的)示例开始。这可以帮助您找到错误并节省其他人使用水晶球的时间。

编辑:

查找此意外行为原因的另一种方法是查看预处理器输出。将Generate Preprocessed FileC/C++/Preprocessor 项目属性页中的选项设置为With line numbers (/P)并查看生成的<sourcefile>.i

检查该 level.h 文件是否包含您想要的内容。

于 2013-05-24T16:19:56.330 回答
0

好的,所以我周末一直在修补我的项目,我终于发现了是什么问题给了我这么多奇怪的编译器错误。似乎我有很多情况下两个头文件相互包含,编译器真的不喜欢这样,所以我更正了,现在我没事了。谢谢大家帮助我,祝你有美好的一天!

于 2013-05-27T18:36:36.023 回答