C++;对子指针的父方法访问 我对C++很陌生,我在玩一个小游戏。我有一个名为Actor的泛型类,它有两个子类,NPC和Player。这个想法是让每个孩子都包含特定的数据,比如杀死NPC的经验或玩家的统计数据,以及特殊的方法。另一方面,Actor包含诸如move之类的通用方法,因为player和NPC都应该移动
现在我有了一个NPC指针的C++;对子指针的父方法访问 我对C++很陌生,我在玩一个小游戏。我有一个名为Actor的泛型类,它有两个子类,NPC和Player。这个想法是让每个孩子都包含特定的数据,比如杀死NPC的经验或玩家的统计数据,以及特殊的方法。另一方面,Actor包含诸如move之类的通用方法,因为player和NPC都应该移动,c++,class,pointers,parent-child,code-organization,C++,Class,Pointers,Parent Child,Code Organization,现在我有了一个NPC指针的向量,我的move方法应该检查目标磁贴是否被NPC(以及其他一些NPC信息)占用,但是我没有从Actor访问该类的权限。我在Actor的NPC中添加了一个转发声明,但随后出现以下错误: 不允许指向不完整类类型的指针 因为转发声明不足以访问NPC方法 Actor.h: class NPC; // Forward declaration. class Actor { public: void move(std::vector<std::unique_
向量,我的move方法应该检查目标磁贴是否被NPC(以及其他一些NPC信息)占用,但是我没有从Actor
访问该类的权限。我在Actor
的NPC
中添加了一个转发声明,但随后出现以下错误:
不允许指向不完整类类型的指针
因为转发声明不足以访问NPC
方法
Actor.h:
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;//远期申报。
班级演员
{
公众:
无效移动(标准::矢量和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.
}
}
void Actor::move(std::vector和NPCs)
{
//通过NPC。
用于(const auto和NPC:NPC)
{
如果(NPC->getOutlook()>0)//错误。
}
}
我可以将move方法放在NPC
和Player
中,但我会复制代码,这是一个非常糟糕的主意
这里的最佳解决方案是什么?我想有一个更好的方法来组织这件事,但它看起来很符合逻辑。也许是某种继承或虚拟功能
谢谢!:) 您需要在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.
}
}
//Actor.cpp
#包括“NPC.h”
void Actor::move(std::vector和NPCs)
{
//通过NPC。
用于(const auto和NPC:NPC)
{
如果(NPC->getOutlook()>0).//现在您就可以访问它了。
}
}
是否将定义了NPC
类的头文件包含在Actor.cpp
源文件中?如果你想使用类的成员,你需要类定义。你可能想在Actor.cpp的顶部包含“NPC.h”
。这不会导致循环包含吗?不,诀窍是只包含Actor.cpp
includeNPC.h
,并且NPC.cpp
也可以包含Actor.h
。头文件不能相互包含。这里有一些警告,比如您的接口不能按值接受NPC
。但是我认为如果你这样做,并在Actor.h
文件的顶部转发declareNPC
,那就足够了。我知道,在.cpp中不会引起麻烦。我觉得自己好笨。谢谢