我必须创建一个游戏。我有抽象的Player类。我有一个GameEngine类,该类具有指向Player的动态指针数组。每当添加玩家时,我都会对其进行分类,并在GameEngine中的“ addPlayer()”方法中创建一个Mage或Hero对象(均为Player的子代)。但是,该方法完成后,指针将被销毁,如果我尝试访问players数组中的该项目,它将崩溃并显示“分段错误”。我知道为什么会这样,但是我不知道如何解决。我什至不确定这是否是完成此任务的正确方法。你能给我建议吗?谢谢:)
编辑
这是一些示例代码:
class GameEngine {
...
Player** players;
...
void addPlayer() {
Hero h("Frodo");
players[playerCount] = &h;
playerCount++;
}
}
class Player { ... }
class Hero : public Player { ... }
答案 0 :(得分:1)
也许是这样的:
onClick
以上是您问题的实质。 onFocus
将一个播放器添加到您的数据库。
更广阔的视野:
class Player
{
public:
virtual std::string& get_name() const = 0;
};
class GameEngine
{
public:
std::vector<Player *> m_players;
void add_player(Player * p)
{
m_players.push_back(p);
}
};
以上是从add_player
派生的示例类。
代码片段,用于创建动态实例并添加到class Shaman
: public Player
{
std::string m_name;
public:
virtual std::string& get_name() const
{
return m_name;
}
Shaman()
: m_name("Bubba")
{ ; }
};
:
Player
请记住,GameEngine
类仅了解Shaman * p_bubba = new Shaman;
GameEngine game;
game.add_player(p_bubba);
中的公共功能和成员。 C ++没有内部设施来获取GameEngine
数据库中子类型的类型名称。我的建议是提供Player
类中m_player
需要了解的所有功能,并让后代实现这些功能。