C++父方法对子指针的访问

C++ parent method access to child pointers

本文关键字:指针 访问 方法 C++      更新时间:2023-10-16

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

现在我有一个vector of NPC pointers,我的移动方法应该检查目标图块是否被 NPC(和其他一些 NPC 信息)占用,但我无法从Actor访问该类。我在Actor内部添加了一个前向声明以NPC,但随后出现此错误:

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

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

演员:

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

演员.cpp:

void Actor::move(std::vector<std::unique_ptr<NPC>> & NPCs)
{
// Go through the NPCs.
for (const auto &NPC : NPCs)
{
if (NPC->getOutlook() > 0) ... // Error.
}
}

我可以将 move 方法放在NPCPlayer中,但我会复制代码,这是一个非常糟糕的主意。

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

谢谢! :)

您需要在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.
}
}