ページ 11

未解決の外部シンボルで困っています

Posted: 2018年5月30日(水) 00:40
by yukina
cpp

コード:

 
#include "DxLib.h"
#include "Config.h"
#include "GameMgr.h"
#include "Menu.h"
#include "SceneMgr.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:
			mScene = (BaseScene*) new Game(this);
			break;
		case eScene_Config:
			mScene = (BaseScene*) new Config(this);
			break;
		}
		mNextScene = eScene_None;    //次のシーン情報をクリア
		mScene->Initialize();    //シーンを初期化
	}

	mScene->Update(); //シーンの更新
}

//描画
void SceneMgr::Draw() {
	mScene->Draw(); //シーンの描画
}

// 引数 nextScene にシーンを変更する
void SceneMgr::ChangeScene(eScene NextScene) {
	mNextScene = NextScene;    //次のシーンをセットする
}



h

コード:

 
 #pragma once

#include "ISceneChanger.h"
#include "BaseScene.h"

class SceneMgr : public ISceneChanger, Task {

private:
	BaseScene * mScene;    //シーン管理変数
	eScene mNextScene;    //次のシーン管理変数

public:
	SceneMgr();
	void Initialize() override;//初期化
	void Finalize() override;//終了処理
	void Update() override;//更新
	void Draw() override;//描画

						 // 引数 nextScene にシーンを変更する
	void ChangeScene(eScene NextScene) override;

};
  


新ゲームプログラミングの館の講座であるメニュー画面の作成方法を確認しながら以上のようなプログラムを組んだのですが


1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug x64 ------
1>Menu.cpp
1>SceneMgr.obj : error LNK2019: 未解決の外部シンボル "public: __cdecl Menu::Menu(class ISceneChanger *)" (??0Menu@@QEAA@PEAVISceneChanger@@@Z) が関数 "public: __cdecl SceneMgr::SceneMgr(void)" (??0SceneMgr@@QEAA@XZ) で参照されました。
1>C:\Users\■■\Desktop\GameProg - コピー\x64\Debug\GameProg.exe : fatal error LNK1120: 1 件の未解決の外部参照
1>プロジェクト "GameProg.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

とエラーが出ました。解決したいのですが、何が原因かわかりません。
未解決の外部シンボルについても調べてみましたが、とくに{}や;抜けもありそうにはありませんでした。
このようなエラーが出た場合、どのような対処をするとエラーが解決しますか?

数年ぶりにC言語を触っておりDXライブラリもはじめて触ったところでして、自分の考えや対策もうまくいかずそもそも今までこのようなエラーを見たことがなかったので困っています。

もしお分かりの方が居ましたらお教えください。解決するために参照しなければならないcppやhがある場合出来うる範囲ですぐ返信します。
何卒よろしくお願いいたします。

Re: 未解決の外部シンボルで困っています

Posted: 2018年5月30日(水) 00:58
by yukina
記載を忘れていました。cppもhもSceneMgrのものを記載しています

Re: 未解決の外部シンボルで困っています

Posted: 2018年5月30日(水) 01:30
by yukina
このあとも色々検索や思考を重ねたところ、
Menuというダイアログのクラスの

コード:

 
Menu::Menu(class ISceneChanger *)" 

というコンストラクタの実体定義がされていないのではないか?というところまで掴みました。
なぜ実態定義がされていないのか己でもよくわからず、おそらく編集の際に誤ってコードを消したのだと思われます。
ご迷惑おかけしました。
本日は時間がないので、明日この確認を取った後修正できるか試してみます。
修正できた際は、どのように修正したか記入しに参ります。