尝试调用setCurrentState方法时,我收到错误消息:



这表明std::shared_ptr<ChaseState>不是std::shared_ptr<State<Cow>>,但是为什么不是呢?

对该函数的调用:

std::shared_ptr<ChaseState> initialState = std::make_shared<ChaseState>();
m_stateMachine->setCurrentState(initialState);

State.h
#pragma once
template <class entity_type>
class State
{
public:
    virtual void enter(entity_type*) = 0;
    virtual void execute(entity_type*) = 0;
    virtual void exit(entity_type*) = 0;
};

ChaseState.h
class Cow;
class ChaseState : State<Cow>
{
public:
    ChaseState();

    // Inherited via State
    virtual void enter(Cow*) override;
    virtual void execute(Cow*) override;
    virtual void exit(Cow*) override;
};

在我的StateMachine中,我有一个私有(private)变量:
std::shared_ptr<State<entity_type>> m_currentState;

和setCurrentState函数:
void setCurrentState(std::shared_ptr<State<entity_type>> s) { m_currentState = s; }

据我了解,派生类ChaseState是一个州(因为它继承自州)。

最佳答案

您需要声明继承public。默认情况下,类继承是私有(private)的,这意味着您不能从Derived转换为Base,因为在类本身之外无法识别继承(与无法在类外访问私有(private)成员的方式相同)。

要解决此问题,请将您的继承公开:

class ChaseState : public State<Cow>
//                 ^^^^^^

07-26 00:39