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)
如果我在运行它时他看不清楚为什么他在编码时会看到它?
你有循环包含.假设您正在编译具有#include "WorldMap.h"
第一个适用#include
语句的文件.该文件WorldMap.h
有#include "Room.h"
那将会造成很大的麻烦.这些问题认真开始Room.h
在#include "WorldMap.h"
声明.#include
由于#pragma once
in,这没有任何效果WorldMap.h
.当编译器到达处理主体的时候Room.h
,WorldMap
既没有定义也没有声明类.
附录
解决方案是摆脱那些无关紧要的#include
陈述.该文件WorldMap.h
并不需要#include
任何的Room.h
或Player.h
.相反,它需要做的类向前声明Room
和Player
.同样,您也不需要所有这些#include
语句Room.h
.
在头文件中使用类型的前向声明通常是一个好主意,而不是包括定义类型的文件.如果标题中的代码不需要知道相关类型的详细信息,只需使用前向声明即可.不要#include
定义类型的标头.
归档时间: |
|
查看次数: |
1269 次 |
最近记录: |