错误:一个声明中有多个类型

时间:2012-02-07 00:52:49

标签: c++ codeblocks

我正在使用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

3 个答案:

答案 0 :(得分:11)

你有一个文件:

#include "Something.h"
#include "Tile.h"

Something.h中,你有这个:

class Something {
    // ...
}

您缺少分号,因此编译器会看到:

class Something {
    // ...
}
enum {
};

哪一个声明包含两种类型(classenum),这是不允许的。在classstructenum之后需要使用分号,因为您可以在与类型相同的声明中声明新类型的实例:

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文件中您是否未向我们展示,还是某种特定于平台的命名冲突。我会尝试逐步重命名所有内容,直到问题消失。

编辑:在这种情况下,原始代码不会改变。