C++中的语法错误包括文件

Vla*_*adp 1 c++ visual-studio-2010 visual-c++

我在微软Visual Studio 2010中用c ++编写游戏,昨天我写了一个乒乓球游戏,一切都很好,但现在编译器告诉我有很多错误,例如:

1>w:\c++\planet escape\planet escape\room.h(25): error C2061: syntax error : identifier 'WorldMap'
Run Code Online (Sandbox Code Playgroud)

这是Room.h文件:

#pragma once

#include <allegro5/allegro.h>
#include <vector>
#include "Entity.h"
#include "WorldMap.h"
#include "Link.h"

#define ROOM_W 20
#define ROOM_H 20

class Room{
private:...
public:...
};
Run Code Online (Sandbox Code Playgroud)

在代码中没有错误,它看到所有类都很好.那么什么会导致这样的错误呢?

编辑:这是WorldMap.h

#pragma once

#include <allegro5/allegro.h>
#include "Room.h"
#include "Player.h"

#define WORLD_W 10
#define WORLD_H 10

class WorldMap{
private:...
public:...
};
Run Code Online (Sandbox Code Playgroud)

如果我在运行它时他看不清楚为什么他在编码时会看到它?

Dav*_*men 5

你有循环包含.假设您正在编译具有#include "WorldMap.h"第一个适用#include语句的文件.该文件WorldMap.h#include "Room.h"那将会造成很大的麻烦.这些问题认真开始Room.h#include "WorldMap.h"声明.#include由于#pragma oncein,这没有任何效果WorldMap.h.当编译器到达处理主体的时候Room.h,WorldMap既没有定义也没有声明类.

附录
解决方案是摆脱那些无关紧要的#include陈述.该文件WorldMap.h并不需要#include任何的Room.hPlayer.h.相反,它需要做的类向前声明RoomPlayer.同样,您也不需要所有这些#include语句Room.h.

在头文件中使用类型的前向声明通常是一个好主意,而不是包括定义类型的文件.如果标题中的代码不需要知道相关类型的详细信息,只需使用前向声明即可.不要#include定义类型的标头.