将动态创建的对象存储在数组C ++中

时间:2019-05-27 15:41:28

标签: c++ arrays object

我必须创建一个游戏。我有抽象的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 { ... }

1 个答案:

答案 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 需要了解的所有功能,并让后代实现这些功能。