トップページ > 記事閲覧
謎のリンクエラーから私を救ってください!
名前:kou 日時: 2016/07/04 00:07

よくわからないリンクエラーがでて困っています 間違っているところがあればご指摘ください //エラー エラー 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にも投稿しています
メンテ

Page: 1 |

Re: 謎のリンクエラーから私を救ってください! ( No.1 )
名前:管理人 日時:2016/07/04 01:07

BaseScene.h の冒頭部分の #pragma once class SceneMgr; //シーンの基底クラス。 class BaseScene : public Task { こちらに、 Task.h のインクルードを追加したらリンクエラーが出なくなりました #pragma once #include "Task.h" class SceneMgr; //シーンの基底クラス。 class BaseScene : public Task { よろしければお試しください
メンテ
Re: 謎のリンクエラーから私を救ってください! ( No.2 )
名前:kou0126 日時:2016/07/04 07:58

本当ですね includeするの忘れてますね! やってみます
メンテ
Re: 謎のリンクエラーから私を救ってください! ( No.3 )
名前:kou0126 日時:2016/07/04 17:08

だめでしたー
メンテ
Re: 謎のリンクエラーから私を救ってください! ( No.4 )
名前:kou 日時:2016/07/04 19:51

なぜかコンソールではなく普通のwinアプリに変えるとできました皆様ありがとうございました!!!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存