我对C ++很陌生,而且我在一个小小的roguelike游戏中工作。我有一个名为Actor
的泛型类,它有2个子类NPC
和Player
。这个想法是为每个孩子提供特定数据,例如通过杀死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
中,但我会复制代码,这是一个非常糟糕的主意。
这里最好的解决方案是什么?我想有一个更好的方法来组织这个,但它似乎很合乎逻辑。也许某种继承或虚拟功能魔术?
谢谢! :)
答案 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.
}
}