繁体   English   中英

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

[英]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 ),这是不允许的。 classstructenum之后需要分号,因为您可以在与类型相同的声明中声明新类型的实例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM