エラーを取得する方法setCurrentState
イムを呼び出そうとすると:から、引数1を変換することはできません「のstd :: shared_ptrの<ChaseState>」STD」に:: shared_ptrの<State<Cow>>
StateMachine<Cow>::setCurrentState(std::shared_ptr<State<Cow>>)': cannot convert argument 1 from 'std::shared_ptr<ChaseState>' to 'std::shared_ptr<State<Cow>>'
これは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;
};
を私はプライベート変数を持っている:
std::shared_ptr<State<entity_type>> m_currentState;
とsetCurrentState機能:
void setCurrentState(std::shared_ptr<State<entity_type>> s) { m_currentState = s; }
Iは、派生クラスChaseState状態であることを理解ように(それが状態から継承behause)。