C ++父方法访问子指针

时间:2017-03-16 12:58:06

标签: c++ class pointers parent-child code-organization

我对C ++很陌生,而且我在一个小小的roguelike游戏中工作。我有一个名为Actor的泛型类,它有2个子类NPCPlayer。这个想法是为每个孩子提供特定数据,例如通过杀死NPC或玩家的统计数据提供的经验,以及特殊方法。另一方面,Actor包含移动等一般方法,因为玩家和NPC都应移动。

现在我有vector of NPC pointers,我的移动方法应检查目标磁贴是否被NPC占用(以及其他一些NPC信息),但我无法访问{{1 }}。我在Actor内向NPC添加了一个前向声明,但后来我收到了这个错误:

  

不允许使用指向不完整类类型的指针

因为前向声明不足以访问Actor方法。

Actor.h:

NPC

Actor.cpp:

class NPC; // Forward declaration.

class Actor
{
    public:
    void move(std::vector<std::unique_ptr<NPC>> & NPCs);
}

我可以将移动方法放在void Actor::move(std::vector<std::unique_ptr<NPC>> & NPCs) { // Go through the NPCs. for (const auto &NPC : NPCs) { if (NPC->getOutlook() > 0) ... // Error. } } NPC中,但我会复制代码,这是一个非常糟糕的主意。

这里最好的解决方案是什么?我想有一个更好的方法来组织这个,但它似乎很合乎逻辑。也许某种继承或虚拟功能魔术?

谢谢! :)

1 个答案:

答案 0 :(得分:0)

您需要在Actor.cpp中包含NPC定义的标头,否则将丢失NPC的定义。

// Actor.cpp
#include "NPC.h"

void Actor::move(std::vector<std::unique_ptr<NPC>> & NPCs)
{
    // Go through the NPCs.
    for (const auto &NPC : NPCs)
    {
        if (NPC->getOutlook() > 0) ... // Now you'll be able to access this.
    }
}