尝试调用方法时setCurrentState
我收到错误:
的StateMachine<牛> :: setCurrentState(STD :: shared_ptr的<状态<牛>&GT)': 无法从'std :: shared_ptr< ChaseState>'转换参数1至 'STD :: shared_ptr的<状态<牛>>'
这表示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中,我有私有变量:
std::shared_ptr<State<entity_type>> m_currentState;
和setCurrentState函数:
void setCurrentState(std::shared_ptr<State<entity_type>> s) { m_currentState = s; }
据我所知,派生类ChaseState是一个State(行为它继承自state)。
答案 0 :(得分:2)
您需要声明您的继承public
。默认情况下,类继承是私有的,这意味着您无法从Derived
强制转换为Base
,因为继承在类本身之外无法识别(与在类外部无法访问私有成员的方式相同)。 / p>
要修复,请将您的继承公开:
class ChaseState : public State<Cow>
// ^^^^^^