访问不同类中的顶级变量和方法

以下是我使用的头文件和cpp文件

头文件

#include "2d/Vector2D.h"#include <list>#include "../../AbstTargetingSystem.h"class AbstRaven_Bot;class Fletcher_getClosestBotStrategy{public:    Fletcher_getClosestBotStrategy()    {}    Fletcher_getClosestBotStrategy(AbstRaven_Bot* owner);    //每次调用此方法时,会检查所有者感官记忆中的对手,并将最近的对手分配给m_pCurrentTarget。
    //如果在所有者的记忆范围内没有对手的记忆记录被更新,则当前目标设置为null
    void       pickTarget();};class Fletcher_TargetingSystem : public AbstTargetingSystem{public:    Fletcher_TargetingSystem(AbstRaven_Bot* owner);    //每次调用此方法时,会检查所有者感官记忆中的对手,并将最近的对手分配给m_pCurrentTarget。
    //如果在所有者的记忆范围内没有对手的记忆记录被更新,则当前目标设置为null
    void       Update();    void         closestBotStrategy();    void      setCurrentTarget(AbstRaven_Bot* t);    AbstRaven_Bot* getCurrentTarget();    void      setCurrentOwner(AbstRaven_Bot* t);    AbstRaven_Bot* getCurrentOwner();};#endif

cpp文件

#include "Fletcher_TargetingSystem.h"#include "../../AbstRaven_Bot.h"#include "../../Raven_SensoryMemory.h"#include "../../Debug/DebugConsole.h"//-------------------------------- ctor ---------------------------------------//-----------------------------------------------------------------------------Fletcher_TargetingSystem::Fletcher_TargetingSystem(AbstRaven_Bot* owner):AbstTargetingSystem(owner){}//-------------------------------- ctor ---------------------------------------//-----------------------------------------------------------------------------Fletcher_getClosestBotStrategy::Fletcher_getClosestBotStrategy(AbstRaven_Bot* owner){}//----------------------------- Update ----------------------------------------//-----------------------------------------------------------------------------//#define script AbstTargetingSystem::Instance()//class AbstTargetingSystem;//----------------------------- closestPlayer ----------------------------------------//-----------------------------------------------------------------------------void Fletcher_getClosestBotStrategy::pickTarget(){    double ClosestDistSoFar = MaxDouble;    for (curBot; curBot != SensedBots.end(); ++curBot)    {        //确保机器人是活的,并且不是所有者
        if ((*curBot)->isAlive() && (*curBot != getCurrentOwner()) )        {            double dist = Vec2DDistanceSq((*curBot)->Pos(), getCurrentOwner()->Pos());            if (dist < ClosestDistSoFar)            {                ClosestDistSoFar = dist;                setCurrentTarget(*curBot);// = *curBot;            }        }    }}void Fletcher_TargetingSystem::Update(){    // currentStrategy = targetClosestBotStrategy;    // target = currentStrategy.pickTarget();    std::list<AbstRaven_Bot*> SensedBots;    SensedBots = getCurrentOwner()->GetSensoryMem()->GetListOfRecentlySensedOpponents();    std::list<AbstRaven_Bot*>::const_iterator curBot = SensedBots.begin();    setCurrentTarget(0);//       = 0;    Fletcher_getClosestBotStrategy* fGCBS = new Fletcher_getClosestBotStrategy(this->getCurrentOwner());    fGCBS->pickTarget();}AbstRaven_Bot* Fletcher_TargetingSystem::getCurrentOwner(){    return m_pOwner;}AbstRaven_Bot* Fletcher_TargetingSystem::getCurrentTarget(){    return m_pCurrentTarget;}void Fletcher_TargetingSystem::setCurrentTarget(AbstRaven_Bot* t){    m_pCurrentTarget = t;}void Fletcher_TargetingSystem::setCurrentOwner(AbstRaven_Bot* t){    m_pOwner = m_pOwner;}

void Fletcher_getClosestBotStrategy::pickTarget()中,我试图访问void Fletcher_TargetingSystem::Update()中的curBotSensedBot方法。我还想访问void Fletcher_TargetingSystem::setCurrentOwner(AbstRaven_Bot* t)以及其他三个类似的方法

任何帮助都将不胜感激。


回答:

在你的方法Fletcher_getClosestBotStrategy::pickTarget()中,你无法访问Fletcher_TargetingSystem::Update()中的变量curBotSensedBot,因为它们是局部变量。

因此,如果你确实需要访问它们,将它们转换为Fletcher_TargetingSystem类的属性,创建setter和getter方法,并尽量避免使用friend类,重新定义你的类依赖关系:将Fletcher_TargetingSystem的常量引用传递给你的Fletcher_getClosestBotStrategy方法:

例如:

class Fletcher_getClosestBotStrategy{    void pickTarget(const Fletcher_TargetingSystem & targeting);    ....};....class Fletcher_TargetingSystem {    protected:        std::list<AbstRaven_Bot*> SensedBots;    public:        std::list<AbstRaven_Bot*> & getSensedBots() const { return SensedBots; }};void Fletcher_getClosestBotStrategy::pickTarget(const Fletcher_TargetingSystem & targeting){    double ClosestDistSoFar = MaxDouble;    std::list<AbstRaven_Bot*> & myLocalSensedBots = targeting.getSensedBots();    ...}

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注