質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

2回答

1533閲覧

DXLib C++アクションゲーム

ko_ki

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

1クリップ

投稿2020/12/10 01:39

編集2020/12/10 02:25

前提・実現したいこと

今年の4月からプログラムを触り始めた初心者です。今、進級課題というとても大事な課題をやらなきゃいけないのですがエラーが出て動きません。どなたか力を貸してください

発生している問題・エラーメッセージ

1>------ ビルド開始: プロジェクト: Project2, 構成: Debug Win32 ------
1>Game1Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です
1>Game2Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です
1>Game3Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です
1>MenuScene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です
1>C:\Users\kouki\OneDrive\ドキュメント\進級課題G1\進級課題G1\進級課題G1\Debug\Project2.exe : fatal error LNK1120: 1 件の未解決の外部参照
1>プロジェクト "Project2.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

該当のソースコード

#include "DxLib.h"

int PlayerX, PlayerY;
int JumpPower;
int PlayerGraph;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
int Key;
// 画面モードのセット
SetGraphMode(640, 480, 16);
if (DxLib_Init() == -1) // DXライブラリの初期化処理
{
return -1; // エラーで終了
}

// 描画先画面を裏画面セット SetDrawScreen(DX_SCREEN_BACK); // グラフィックロード PlayerGraph = LoadGraph("?????.bmp"); // キャラクターの初期位置セット PlayerX = 0; PlayerY = 300; // ループ while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { // キー入力取得 Key = GetJoypadInputState(DX_INPUT_KEY_PAD1); // 上入力で上に進む if (Key & PAD_INPUT_UP) PlayerY -= 10; // 下入力で下に進む if (Key & PAD_INPUT_DOWN) PlayerY += 10; // 右入力で右に進む if (Key & PAD_INPUT_RIGHT) PlayerX += 5; // 左入力で左に進む if (Key & PAD_INPUT_LEFT) PlayerX -= 5; // 落下処理 PlayerY -= JumpPower; // 落下加速度付加 JumpPower -= 1; // 地面についていたら停止 if (PlayerY > 300) { PlayerY = 300; JumpPower = 0; } // Zボタンを押していて、地面についていたらジャンプ if ((Key & PAD_INPUT_A) && PlayerY == 300) JumpPower = 100; // 画面を初期化する ClearDrawScreen(); // プレイヤーを描画する DrawGraph(PlayerX, PlayerY, PlayerGraph, TRUE); // 裏画面の内容を表画面に反映させる ScreenFlip(); } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了

}

試したこと

googleを使い調べてみたがよくわからない

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bull

2020/12/10 02:25

ご提示のソースコードをビルドしても、エラーにはならないようです。 エラーになるソースコードを提示して頂けますか? エラーメッセージを読む限り、少なくとも四つのソースファイルに分割してビルドしているようですが、ご提示のソースコードは一つで完結しています。
ko_ki

2020/12/10 02:34

1>Game1Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>Game2Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>Game3Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>MenuScene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です ↑こちらの事でしょうか ご指摘の通りソースファイルは4つもいらなかったので削除しました
Bull

2020/12/10 02:37

削除した後に、プロジェクトのリビルドをしてみてください。
ko_ki

2020/12/10 02:47

リビルドしてきました。しかし、失敗とでてきてしまいました >------ ビルド開始: プロジェクト: Project2, 構成: Debug Win32 ------ 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "int __cdecl initGame1Scene(void)" (?initGame1Scene@@YAHXZ) が関数 "void __cdecl initCurrentScene(void)" (?initCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl moveGame1Scene(void)" (?moveGame1Scene@@YAXXZ) が関数 "void __cdecl moveCurrentScene(void)" (?moveCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl renderGame1Scene(void)" (?renderGame1Scene@@YAXXZ) が関数 "void __cdecl renderCurrentScene(void)" (?renderCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl releaseGame1Scene(void)" (?releaseGame1Scene@@YAXXZ) が関数 "void __cdecl releaseCurrentScene(void)" (?releaseCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl Game1SceneCollideCallback(int,int,int)" (?Game1SceneCollideCallback@@YAXHHH@Z) が関数 "void __cdecl CollideCallback(int,int,int)" (?CollideCallback@@YAXHHH@Z) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "int __cdecl initGame2Scene(void)" (?initGame2Scene@@YAHXZ) が関数 "void __cdecl initCurrentScene(void)" (?initCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl moveGame2Scene(void)" (?moveGame2Scene@@YAXXZ) が関数 "void __cdecl moveCurrentScene(void)" (?moveCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl renderGame2Scene(void)" (?renderGame2Scene@@YAXXZ) が関数 "void __cdecl renderCurrentScene(void)" (?renderCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl releaseGame2Scene(void)" (?releaseGame2Scene@@YAXXZ) が関数 "void __cdecl releaseCurrentScene(void)" (?releaseCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl Game2SceneCollideCallback(int,int,int)" (?Game2SceneCollideCallback@@YAXHHH@Z) が関数 "void __cdecl CollideCallback(int,int,int)" (?CollideCallback@@YAXHHH@Z) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "int __cdecl initGame3Scene(void)" (?initGame3Scene@@YAHXZ) が関数 "void __cdecl initCurrentScene(void)" (?initCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl moveGame3Scene(void)" (?moveGame3Scene@@YAXXZ) が関数 "void __cdecl moveCurrentScene(void)" (?moveCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl renderGame3Scene(void)" (?renderGame3Scene@@YAXXZ) が関数 "void __cdecl renderCurrentScene(void)" (?renderCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl releaseGame3Scene(void)" (?releaseGame3Scene@@YAXXZ) が関数 "void __cdecl releaseCurrentScene(void)" (?releaseCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl Game3SceneCollideCallback(int,int,int)" (?Game3SceneCollideCallback@@YAXHHH@Z) が関数 "void __cdecl CollideCallback(int,int,int)" (?CollideCallback@@YAXHHH@Z) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "int __cdecl initMenuScene(void)" (?initMenuScene@@YAHXZ) が関数 "void __cdecl initCurrentScene(void)" (?initCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl moveMenuScene(void)" (?moveMenuScene@@YAXXZ) が関数 "void __cdecl moveCurrentScene(void)" (?moveCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl renderMenuScene(void)" (?renderMenuScene@@YAXXZ) が関数 "void __cdecl renderCurrentScene(void)" (?renderCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl releaseMenuScene(void)" (?releaseMenuScene@@YAXXZ) が関数 "void __cdecl releaseCurrentScene(void)" (?releaseCurrentScene@@YAXXZ) で参照されました 1>GameSceneMain.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MenuSceneCollideCallback(int,int,int)" (?MenuSceneCollideCallback@@YAXHHH@Z) が関数 "void __cdecl CollideCallback(int,int,int)" (?CollideCallback@@YAXHHH@Z) で参照されました 1>C:\Users\kouki\OneDrive\ドキュメント\進級課題G1\進級課題G1\進級課題G1\Debug\Project2.exe : fatal error LNK1120: 20 件の未解決の外部参照 1>プロジェクト "Project2.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
guest

回答2

0

Game1Scene.cpp,Game2Scene.cpp,Game3Scene.cpp,MenuScene.cpp内の何かしらの関数でEdgeInputを呼び出したがそれが何なのかわからない、つまり宣言はあるが定義がないということです。おそらくそれらのcppファイルの先頭にEdgeInputを宣言した.hをincludeしているはずです。なのでEdgeInputを別のcppかなんかに定義を書いてください。
ファイルを分割して書く方法はこの記事(https://dixq.net/g/d_02.html)を参照してください。

投稿2021/01/03 11:56

legohasiri

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1>Game1Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>Game2Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>Game3Scene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です 1>MenuScene.obj : error LNK2001: 外部シンボル "int EdgeInput" (?EdgeInput@@3HA) は未解決です

エラーメッセージの示すとおり、Game1Scene.cpp, Game1Scene.cpp, Game1Scene.cpp, MenuScene.cpp の中で 関数 EdgeInput を呼んでいるが、肝心の EdgeInput がどこにもないと言ってます。

Project2 は Game1Scene.cpp, Game1Scene.cpp, Game1Scene.cpp, MenuScene.cpp を必要としているのでしょうか? 不要ならこれらをプロジェクトから削除しましょう。

投稿2020/12/10 01:57

編集2020/12/10 02:00
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ko_ki

2020/12/10 02:06

回答ありがとうございます。 EdgeInputってどこを探せば見つかりますかですか?ファイルの中にあるんですか?
episteme

2020/12/10 02:11 編集

いやだから、EdgeInputがプロジェクト内(もしくは一緒にリンクしたライブラリ内)に存在しない(のでリンクできない/exeが作れない)のが原因です。 どこにあるかはわかりませんし、なければ作るしかありません。 で、Project2 は Game1Scene.cpp, Game1Scene.cpp, Game1Scene.cpp, MenuScene.cpp を必要としているのでしょうか?
ko_ki

2020/12/10 02:22

なるほど EdgeInputが存在してないからエラーがでるんですね。 それと、Game1Scene.cpp, Game1Scene.cpp, Game1Scene.cpp, MenuScene.cppは必要なかったので消しました 回答ありがとうございました
episteme

2020/12/10 03:21

解決しました?
ko_ki

2020/12/10 04:27 編集

#define EdgeInput を付けて実行したところ、fatal error LNK1120:とでてきたのですがどうすればいいでしょうか。 何度もすみません
episteme

2020/12/10 05:58 編集

「Game1Scene.cpp, Game1Scene.cpp, Game1Scene.cpp, MenuScene.cppは必要なかったので消しました」なら EdgeInput を呼んでるとこはないはずでしょ? あなた一体ナニしたんですか? あるいはナニがしたくて #define EdgeInput を付けたんですか?
ko_ki

2020/12/10 13:50

EdgeInputを書かないとエラーがおこるじゃないですか。なので、visual studioに入力したのですがエラーがでてしまったのでエラーを消すため#define EdgeInputと入力したらエラーが消えたので゙… 勉強不足ですみません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問