自キャラの状態が増えてきたので、ステートパターンでコード全体を書き換えたところ次のようなエラーが出るようになりました。
いろいろ試したのですが、エラー文が難解で何を言っているのかよくわかりません。
すみませんがご助力願います。
《エラー文》
エラー 9 error LNK2019: 未解決の外部シンボル "public: virtual class CharaState * __thiscall CharaState::processInput(struct DxLib::tagVECTOR)" (?processInput@CharaState@@UAEPAV1@UtagVECTOR@DxLib@@@Z) が関数 "public: __thiscall std::_Generic_error_category::_Generic_error_category(void)" (??0_Generic_error_category@std@@QAE@XZ) で参照されました。 D:\3dgame\projects\20160403_state_pattern_jissou\CharaStateWalk.obj 3dbasic
《コード一部抜粋》
CharaState.h
#ifndef CHARASTATE_H_LOADED
#define CHARASTATE_H_LOADED
#include <DxLib.h>
#include "Chara.h"
class Chara;
class CharaState
{
private:
void setKabeYuka(MV1_COLL_RESULT_POLY *kabe[], MV1_COLL_RESULT_POLY *yuka[], int *kabeNum, int *yukaNum, Chara *pChara);
void collCheckKabe(MV1_COLL_RESULT_POLY *kabe[], int kabeNum, int moveFlag, VECTOR oldPos, VECTOR *newPos, VECTOR pMoveVector);
virtual CharaState* collCheckYuka(MV1_COLL_RESULT_POLY *yuka[], int yukaNum, VECTOR *newPos);
public:
//virtual ~CharaState();
virtual CharaState* processInput(VECTOR pMoveVector);
virtual CharaState* update(VECTOR *pMoveVector);
virtual void enter(Chara *pChara);
CharaState* move(Chara *pChara, VECTOR pMoveVector);
};
#endif
#include "Chara.h"
#include "CharaState.h"
#include "CharaStateJump.h"
#include "DEFINE_CONSTANTS.h"
extern int gWorldModel;
extern MV1_COLL_RESULT_POLY_DIM gHitDim;
void CharaState::setKabeYuka(MV1_COLL_RESULT_POLY *kabe[], MV1_COLL_RESULT_POLY *yuka[], int *kabeNum, int *yukaNum, Chara *pChara)
{
//省略
}
void CharaState::collCheckKabe(MV1_COLL_RESULT_POLY *kabe[], int kabeNum, int moveFlag, VECTOR oldPos, VECTOR *newPos, VECTOR pMoveVector)
{
//省略
}
//このcollCheckYukaはジャンプ時以外のもの
CharaState* CharaState::collCheckYuka(MV1_COLL_RESULT_POLY *yuka[], int yukaNum, VECTOR *newPos)
{
//省略
}
//★gHitDimの解放処理を忘れないこと
CharaState* CharaState::move(Chara *pChara, VECTOR pMoveVector)
{
//省略
}
CharaStateWalk.h
#ifndef CHARASTATEWALK_H_LOADED
#define CHARASTATEWALK_H_LOADED
#include "CharaState.h"
class CharaStateWalk : public CharaState
{
public:
virtual CharaState* update(VECTOR *pMoveVector);
virtual CharaState* processInput(VECTOR pMoveVector);
virtual void enter(Chara *pChara);
};
#endif
#include "Chara.h"
#include "CharaStateStand.h"
#include "CharaStateWalk.h"
#include "CharaStateJump.h"
#include "DEFINE_CONSTANTS.h"
CharaState* CharaStateWalk::update(VECTOR *pMoveVector)
{
if (pMoveVector->x == 0 && pMoveVector->z == 0)
{
return new CharaStateStand();
}
return nullptr;
}
CharaState* CharaStateWalk::processInput(VECTOR pMoveVector)
{
if (CheckHitKey(KEY_INPUT_SPACE))
{
return new CharaStateJump(PLAYER_JUMP_POWER);
}
return nullptr;
}
void CharaStateWalk::enter(Chara *pChara)
{
//自キャラの初期アニメーションは「立ち」
pChara->playAnim(ECharaAnim_Walk);
}