我正在使用Code :: Blocks和Mingw32与SDL库。错误出现在我的代码的第13行(下面评论)。
经过一番搜索,我认为这是一个缺少分号(;),但这似乎并非如此。其他研究表明,它可能是包含文件中的错误。
不幸的是,包含中没有错误,即使包含被注释掉,此错误仍然存在。当枚举块被注释掉时,错误会跳转到类声明的末尾。
#ifndef _TILE_H_
#define _TILE_H_
#include "Define.h"
enum
{
TILE_TYPE_NONE = 0,
TILE_TYPE_GROUND,
TILE_TYPE_RAMPUP,
TILE_TYPE_RAISED,
TILE_TYPE_RAMPDOWN
}; //error occurs here (line 13)
class Tile
{
public:
int TileID;
int TypeID;
public:
Tile();
};
#endif
这实际上是在添加新类后开始发生的,但是新类完全不相关,并且根本不使用,包含或继承已发布的类。
任何建议或信息都会非常感激。
编辑(添加Define.h):
#ifndef _DEFINE_H_
#define _DEFINE_H_
#define MAP_WIDTH 40
#define MAP_HEIGHT 40
#define TILE_SIZE 16
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
#endif
答案 0 :(得分:11)
你有一个文件:
#include "Something.h"
#include "Tile.h"
在Something.h
中,你有这个:
class Something {
// ...
}
您缺少分号,因此编译器会看到:
class Something {
// ...
}
enum {
};
哪一个声明包含两种类型(class
和enum
),这是不允许的。在class
,struct
和enum
之后需要使用分号,因为您可以在与类型相同的声明中声明新类型的实例:
struct Point { int x; int y; } my_point;
(此外,保留以_
开头的大写字母和大写字母。使用TILE_H
代替_TILE_H_
。)
答案 1 :(得分:1)
当我注释掉Define.h的include时,这段代码使用g ++编译好。这表明,正如您所建议的那样,包含文件中确实可能存在问题。也许你在Define.h的末尾错过了一个分号,或者那里有一些其他的语法问题。
答案 2 :(得分:0)
我调用了您的第一个文件Tile.h
并创建了Tile.cpp
,如下所示:
#include "Tile.h"
Tile::Tile()
{
}
int main()
{
return 0;
}
然后我用g ++编译了Ubuntu Linux:
$ g ++ Tile.cpp -o Tile
我既没有收到编译也没有收到运行时错误(gcc
也是如此)。您的问题出在其他地方 - 无论是在#include
d文件中您是否未向我们展示,还是某种特定于平台的命名冲突。我会尝试逐步重命名所有内容,直到问题消失。
编辑:在这种情况下,原始代码不会改变。