[英]Error: multiple types in one declaration
我正在使用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
你有一个文件:
#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_
。)
当我注释掉Define.h的include时,这段代码使用g ++编译好。 这表明,正如您所建议的那样,包含文件中确实可能存在问题。 也许你在Define.h的末尾错过了一个分号,或者那里有一些其他的语法问题。
我调用了你的第一个文件Tile.h
并创建了Tile.cpp
,如下所示:
#include "Tile.h"
Tile::Tile()
{
}
int main()
{
return 0;
}
然后我用g ++在Ubuntu Linux上编译:
$ g ++ Tile.cpp -o Tile
我既没有收到编译也没有收到运行时错误(对于gcc
)。 您的问题出在其他地方 - 要么是#include
d文件,要么没有向我们展示,要么是某种特定于平台的命名冲突。 我会尝试逐步重命名所有内容,直到问题消失。
编辑:在这种情况下,您的原始代码不会改变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.