C++ 错误:一个声明中包含多个类型

C++ 错误:一个声明中包含多个类型,c++,codeblocks,C++,Codeblocks,我正在SDL库中使用Code::Blocks和Mingw32。错误出现在我的代码的第13行(注释如下) 经过一番搜索,我认为这是一个缺少的分号(;),但这里的情况似乎不是这样。额外的研究表明,这可能是包含文件中的错误 不幸的是,include中没有错误,即使将include注释掉,此错误仍然存在。当枚举块被注释掉时,错误跳到类声明的末尾 #ifndef _TILE_H_ #define _TILE_H_ #include "Define.h" enum { TILE_TYPE_NON

我正在SDL库中使用Code::Blocks和Mingw32。错误出现在我的代码的第13行(注释如下)

经过一番搜索,我认为这是一个缺少的分号(;),但这里的情况似乎不是这样。额外的研究表明,这可能是包含文件中的错误

不幸的是,include中没有错误,即使将include注释掉,此错误仍然存在。当枚举块被注释掉时,错误跳到类声明的末尾

#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):


当我注释掉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文件中,你没有向我们展示,要么是某种特定于平台的命名冲突。我会尝试逐步重命名所有内容,直到问题消失


编辑:在这种情况下,您的原始代码保持不变。

您有一个包含以下内容的文件:

#include "Something.h"
#include "Tile.h"
Something.h
中,您有:

class Something {
    // ...
}
缺少分号,因此编译器会看到:

class Something {
    // ...
}
enum {
};
这是一个包含两种类型(一个
和一个
枚举
)的声明,这是不允许的。在
class
struct
enum
之后需要分号,因为可以在与类型相同的声明中声明新类型的实例:

struct Point { int x; int y; } my_point;

(此外,名称以
\uuu
开头并保留一个大写字母。请使用
TILE\u H
而不是
\u TILE\u H

您是想给您的
枚举
一个名称吗?(例如,
enum e_tile_type{/*…*/};
)查找包含文件的位置的问题这看起来像是
Define.h
中的问题。不要将
\u
放在包含防护装置前面。这些名称由实现保留。显示文件的使用位置!!!请确保它确实是.hpp文件,而不是.cpp文件,在该文件中,错误isI将文章编辑为包含Define.h。对我来说,当include在Tile.h中被注释掉时,编译器仍然抛出相同的错误。是的,Define.h中看起来没有问题。但是,它只包含宏,没有代码,所以问题实际上可能出在Tile.h前面的代码中。您可以尝试编译“gcc-E”或等效文件中包含Tile.h的文件,以查看预处理器的输出。事实正是如此,在许多英里之外,缺少了一个分号,这一切都很奇怪。谢谢你的解释。@TechRomancer:很荣幸。我在书中已经做了每一个C++错误。P
struct Point { int x; int y; } my_point;