よくわからないリンクエラーがでて困っています
間違っているところがあればご指摘ください
//エラー
エラー LNK2019 未解決の外部シンボル "public: __thiscall SceneMgr::SceneMgr(void)" (??0SceneMgr@@QAE@XZ) が関数 _WinMain@16 で参照されました。 Dxlib c:\Users\morim\documents\visual studio 2015\Projects\Dxlib\main.obj 1
エラー LNK2019 未解決の外部シンボル "public: virtual void __thiscall SceneMgr::Initialize(void)" (?Initialize@SceneMgr@@UAEXXZ) が関数 _WinMain@16 で参照されました。 Dxlib c:\Users\morim\documents\visual studio 2015\Projects\Dxlib\main.obj 1
エラー LNK2019 未解決の外部シンボル "public: virtual void __thiscall SceneMgr::Update(void)" (?Update@SceneMgr@@UAEXXZ) が関数 _WinMain@16 で参照されました。 Dxlib c:\Users\morim\documents\visual studio 2015\Projects\Dxlib\main.obj 1
エラー LNK2019 未解決の外部シンボル "public: virtual void __thiscall SceneMgr::Draw(void)" (?Draw@SceneMgr@@UAEXXZ) が関数 _WinMain@16 で参照されました。 Dxlib c:\Users\morim\documents\visual studio 2015\Projects\Dxlib\main.obj 1
エラー LNK2019 未解決の外部シンボル "public: virtual void __thiscall SceneMgr::Finalize(void)" (?Finalize@SceneMgr@@UAEXXZ) が関数 _WinMain@16 で参照されました。 Dxlib c:\Users\morim\documents\visual studio 2015\Projects\Dxlib\main.obj 1
エラー LNK1120 5 件の未解決の外部参照 Dxlib c:\users\morim\documents\visual studio 2015\Projects\Dxlib\Debug\Dxlib.exe 1
//コード
BseScene.cpp
#include "BaseScene.h"
#include "DxLib.h"
#include "SceneMgr.h"
BaseScene::BaseScene(SceneMgr* changer) :
mImageHandle(0) {
mSceneChanger = changer;
}
void BaseScene::Finalize(){
DeleteGraph(mImageHandle);
}
void BaseScene::Draw(){
DrawGraph(0,0,mImageHandle,FALSE);
}
BaseScene.h
#pragma once
class SceneMgr;
//シーンの基底クラス。
class BaseScene : public Task {
protected:
int mImageHandle;
SceneMgr* mSceneChanger;
public:
BaseScene(SceneMgr* changer);
virtual ~BaseScene() {}
virtual void Initialize() override{}
virtual void Finalize() override;
virtual void Update() override{}
virtual void Draw() override;
};
main.cpp
#include "DxLib.h"
#include "Define.h"
#include "SceneMgr.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
bool WindowMode = true;
bool DebugMode = false;
/*****************************************************************************************/
/*ウィンドウ設定 */
/*****************************************************************************************/
SetMainWindowText("HOUREKIDEN");//タイトル指定
SetBackgroundColor(0, 0, 0);
SetGraphMode(WINDOW_WSIZE_X, WINDOW_SIZE_Y, 32);//画面モードの変更
ChangeWindowMode(WindowMode);// ウインドウモードに変更
/*---------------------------------------------------------*/
SetFullScreenResolutionMode(DX_FSRESOLUTIONMODE_DESKTOP);
/*
DX_FSRESOLUTIONMODE_NATIVE
モニターの解像度を SetGraphMode で指定した解像度に変更するモード(デフォルト)
DX_FSRESOLUTIONMODE_DESKTOP
モニターの解像度をデスクトップ画面と同じにして
SetGraphMode で指定した解像度の画面を拡大して表示するモード
DX_FSRESOLUTIONMODE_MAXIMUM
モニターの解像度を最大にして、SetGraphMode で指定した解像度の画面を
拡大して表示するモード
*/
/*****************************************************************************************/
/*DXライブラリ初期化処理 */
/*****************************************************************************************/
if (DxLib_Init() == -1)
{
return -1; // エラーが起きたら直ちに終了
}
SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定
SceneMgr sceneMgr;
sceneMgr.Initialize();
/*****************************************************************************************/
/*ゲームループ */
/*****************************************************************************************/
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ClearDrawScreen() == 0){
sceneMgr.Update(); //更新
sceneMgr.Draw(); //描画
}
/*****************************************************************************************/
sceneMgr.Finalize();
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
Menu.cpp
#include "Menu.h"
#include "DxLib.h"
Menu::Menu(SceneMgr* changer) : BaseScene(changer) {
}
//初期化
void Menu::Initialize(){
}
//更新
void Menu::Update(){
}
//描画
void Menu::Draw(){
}
Menu.h
#pragma once
#include "BaseScene.h"
//メニュー画面クラス
class Menu : public BaseScene {
public :
Menu(SceneMgr* changer);
void Initialize() override; //初期化処理をオーバーライド。
//void Finalize() override ; //終了処理をオーバーライド。
void Update() override; //更新処理をオーバーライド。
void Draw() override; //描画処理をオーバーライド。
};
SceneMgr.cpp
#include "SceneMgr.h"
#include "BaseScene.h"
#include "Menu.h"
SceneMgr::SceneMgr() :
mNextScene(eScene_None) //次のシーン管理変数
{
mScene = (BaseScene*) new Menu(this);
}
//初期化
void SceneMgr::Initialize() {
mScene->Initialize();
}
//終了処理
void SceneMgr::Finalize() {
mScene->Finalize();
}
//更新
void SceneMgr::Update() {
if (mNextScene != eScene_None) { //次のシーンがセットされていたら
mScene->Finalize();//現在のシーンの終了処理を実行
delete mScene;
switch (mNextScene) { //シーンによって処理を分岐
case eScene_Menu: //次の画面がメニューなら
mScene = (BaseScene*) new Menu(this); //メニュー画面のインスタンスを生成する
break;//以下略
case eScene_Game:
break;
case eScene_Config:
break;
}
mNextScene = eScene_None; //次のシーン情報をクリア
mScene->Initialize(); //シーンを初期化
}
mScene->Update(); //シーンの更新
}
//描画
void SceneMgr::Draw() {
mScene->Draw(); //シーンの描画
}
// 引数 nextScene にシーンを変更する
void SceneMgr::SceneChanger(eScene NextScene) {
mNextScene = NextScene; //次のシーンをセットする
}
SceneMgr.h
#pragma once
#include "Task.h"
enum eScene {
eScene_Menu,
eScene_Game,
eScene_Config,
eScene_None,
};
class BaseScene;
class SceneMgr : public Task
{
private:
BaseScene* mScene;
eScene mNextScene;
public:
SceneMgr();
void Initialize() override;
void Update() override;
void Draw() override;
void Finalize() override;
void SceneChanger(eScene NextScene);
};
Task.h
#pragma once
//タスククラス。何かのモジュールはすべてこのTaskクラスを継承する。
class Task {
public:
virtual ~Task(){}
virtual void Initialize(){} //初期化処理は実装してもしなくてもいい
virtual void Finalize(){} //終了処理は実装してもしなくてもいい
virtual void Update() = 0; //更新処理は必ず継承先で実装する
virtual void Draw() = 0; //描画処理は必ず継承先で実装する
};
見苦しいコードですがよろしくお願いします(T_T)
ちなみにコンソールアプリケーションであることは確認しました
ttp://dixq.net/forum/viewtopic.php?f=3&t=18155にも投稿しています