子级访问同一父级的其他子级的元素
Children Accessing Elements of Other Children of the Same Parent
我目前正在使用C++开发一款RPG游戏,我已经到了在地图上包含事件的地步。
我希望能够让地图上的事件治愈玩家。我认为最简单的方法是使用"this"关键字将指针传递到游戏中的事件对象。当我开始这样做的时候,出现了一大堆编译器错误,这些错误似乎是由于试图包含一个当前正试图包含另一个类的类而导致的。(我想是无休止的循环?)
例如。我有我的"game"类,它有一个属于"mapManager"类的公共成员。然后,"mapManager"对象将"event"对象作为成员。"game"对象的"成员"中也有一个"player"对象。我需要"玩家"拥有的"事件"对象更改变量。我可以诚实地在需要的时候投进球,但这可能会变得麻烦。
我想问的是,是否有一种简单的方法可以让父母的一个孩子访问该父母的另一个孩子,或者是否可以更容易地将指针指向所有需要它们的子类,指向其他孩子。
哇。。。这没有什么意义,但希望有人能理解我,给我一个好的答案。这里有一些代码,以防有帮助。
:game.h
include "player.h" include "event.h"
class game { public: player Player; event Event; };
:player.h
class player { public: game* Game;
};
:event.h
class event { public: game* Game; };
这样做会导致"game不命名类型",所以我试图将game包含在event.h和player.h中,但也出现了同样的错误。我想做的是能够从事件内部访问玩家的可变生命值。
最好尽可能避免循环引用;但是,如果真的想要这样做,那么解决方案是在头文件的顶部转发声明您的类Game
,该头文件将使用对它的引用/指针。例如
#ifndef EVENTH
#define EVENTH
class Game;
class Event
{
Game* game;
};
#endif
和。。
#ifndef PLAYERH
#define PLAYERH
class Game;
class Player
{
Game* game;
};
#endif
对于不需要知道Game
类的实现/大小的头文件,一个简单的正向声明就足以让编译器知道存在具有该名称的类。
在.cpp
源文件中(其中Game
的实现实际上很重要,并且由Player/Event实现使用),您仍然需要#include
包含Game类定义的标头。
//game.h
class event;
class game {
event _e;
private:
game(){}
//game& operator=(game& other) {}
~game(){}
public:
static game & getInstance() {
static game instance;
return instance;
}
event& getEvent() {return _e;}
};
//HealEventObserver.h
class HealEventObserver {
public:
virtual void heal() = 0;
virtual ~HealEventObserver(){}
};
//player.h include game.h and HealEventObserver.h event.h
class Player : public HealEventObserver
{
public:
virtual void heal() {/*heal the player*/}
Player() {
game& instance = game::getInstance();
event& e = instance.getEvent();
e.registerObserver(this);
}
};
//event.h include HealEventObserver.h
class event {
std::set<HealEventObserver*> _observers;
void notify() {
std::set<HealEventObserver*>::iterator it = _observers.begin();
std::set<HealEventObserver*>::iterator end = _observers.end();
for( ;it!=end; ++it) {
it->heal();
}
}
public:
void registerObserver(HealEventObserver* observer) {_observers.insert(observer);}
};
不要让你的事件对象改变玩家,只要让事件告诉玩家治愈自己。另外,若假设游戏代表一切,那个么就把它变成全球性的。
回答评论:(这只是我的意见,没有其他。)
经过一点研究,我发现了这个链接,提供了伟大的参考名称。
最终的C++图书指南和列表
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 将 Vector<String > 元素复制到其他 Vector<String>* (1 作为
- 将向量C++中的每个其他元素累加
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 我有一系列阵列.可以从一个数组中阅读一些元素和另一个数组中的其他元素
- 在一个类中向向量添加元素不适用于其他类
- 当从其他方法返回 vector 时,C++无法访问矢量元素
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- 将多种数据类型写入文件时的其他行和额外的数组元素
- 如何在unordered_map中插入 3 个元素或其他奇数个元素
- 检查unordered_set是否包含其他unordered_set中的所有元素 - C++
- C++11 在列表到映射(或其他容器)之间移动元素
- C++:从动态结构数组中删除元素并移动其他元素
- 为什么 size() 在与其他堆栈交换元素后提供错误的堆栈大小?
- 使用对其他枚举值的操作定义枚举元素值
- C 链接列表仅输出其他每个元素
- 从两个列之一返回值,或跳过数组中的所有其他元素
- 检查两个数组中的相似元素,为某些测试返回正确的值,为其他测试返回不正确的值
- 子级访问同一父级的其他子级的元素