リンクエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kou0126
記事: 6
登録日時: 9年前

リンクエラー

#1

投稿記事 by kou0126 » 9年前

よくわからないリンクエラーがでて困っています
間違っているところがあればご指摘ください

//エラー

エラー 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)


YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: リンクエラー

#3

投稿記事 by YuO » 9年前

リンカに,BseScene.obj, main.obj, Menu.obj, SceneMgr.objというすべてのオブジェクトファイルを渡していますか。
Visual Studioやmsbuildでビルドしているならば,すべてのファイルを一つのプロジェクトに入れていますか。

kou01262

Re: リンクエラー

#4

投稿記事 by kou01262 » 9年前

返信ありがとうございます
入れていると思うのですが、、、
一応もう一度やってみます

kou0126
記事: 6
登録日時: 9年前

Re: リンクエラー

#5

投稿記事 by kou0126 » 9年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る