C ++奇怪的错误。无法编译

时间:2013-05-24 11:16:30

标签: c++ visual-c++ allegro5

我一直在使用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);
};

2 个答案:

答案 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)

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