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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

DXライブラリ

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

解決済

「定義されていない識別子です。」というエラーの原因が分からない

fkcz_yfm_carp
fkcz_yfm_carp

総合スコア4

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

DXライブラリ

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

2回答

0評価

0クリップ

6088閲覧

投稿2021/04/10 08:00

前提・実現したいこと

Visual Studio上でDXライブラリを使用してアクションゲームを作っています。
エラーなく動いていたファイルを分割し、新たに当たり判定を実装したところ「ビルド エラーが発生しました。続行して、最後に成功したビルドを実行しますか?」というダイアログが出て以下のエラーメッセージが発生しました。

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

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 8 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 9 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 10 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 11 エラー C2065 'Font': 定義されていない識別子です。 Action_Game Collision.cpp 17 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 24 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 25 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 26 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 27 エラー C2065 'Font': 定義されていない識別子です。 Action_Game CCollision.cpp 33 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 49 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 57 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 82 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 86

該当のソースコード

C++

//main.cpp #include "DxLib.h" #include "Player.h" #include "Enemy.h" #include "Collision.h" //初期ウィンドウサイズは640x480 //キー押下フレーム数 char Key[256]; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (ChangeWindowMode(TRUE) != 0) { return 0; } if (DxLib_Init() != 0) { return 0; } if (SetDrawScreen(DX_SCREEN_BACK) != 0) { return 0; } if (SetBackgroundColor(0, 255, 0) != 0) { return 0; } //音楽ファイルロード int Handle_bgm = LoadSoundMem("./Audio/famipop3.mp3"); //音楽再生 PlaySoundMem(Handle_bgm, DX_PLAYTYPE_LOOP); Player_Initialize(); Enemy_Initialize(); while (1) { if (ScreenFlip() != 0) { break; } if (ProcessMessage() != 0) { break; } if (ClearDrawScreen() != 0) { break; } if (GetHitKeyStateAll(Key) != 0) { break; } Player_Update(); Enemy_Update(); CheckHitWidth(); CheckHitHeight(); Player_Draw(); Enemy_Draw(); } Player_Finalize(); Enemy_Finalize(); //DXライブラリ終了処理 DxLib_End(); return 0; } //-------------------------------------------------- //Player.cpp #include "DxLib.h" #include "Player.h" //プレイヤー画像用 typedef struct { int x, y, y_prev, y_temp, flag, fflag, img; } player_t; player_t player; int Handle_p[16]; bool jflag = false; bool sflag = false; //フォントデータロード int Font = CreateFontToHandle("メイリオ", 32, 4, DX_FONTTYPE_ANTIALIASING_EDGE); //初期化 void Player_Initialize() { //画像ファイルロード LoadDivGraph("./Image/player.png", 16, 4, 4, 64, 64, Handle_p); //プレイヤー座標 player.x = 64 / 2; player.y = 480 - (64 / 2); player.y_prev = 0; player.y_temp = 0; //フラグ player.flag = 0; player.fflag = 0; } //計算 void Player_Update() { //プレイヤー移動制御 if (player.x < (64 / 2)) { player.x = (64 / 2); } if (player.x + (64 / 2) > 640) { player.x = 640 - (64 / 2); } if (player.y < (64 / 2)) { player.y = (64 / 2); } if (player.y + (64 / 2) > 480) { player.y = 480 - (64 / 2); } //下キーが押下された場合 if (Key[KEY_INPUT_DOWN] == 1) { //しゃがみフラグ sflag = true; } else { sflag = false; } //上キーが押下され現在のy座標が480 - (64 / 2)でしゃがみフラグが立っていない場合 if (Key[KEY_INPUT_UP] == 1 && player.y == 480 - (64 / 2) && sflag == false) { //ジャンプフラグ jflag = true; //現在のy座標を前回分に保存 player.y_prev = player.y; //現在のy座標を24減らす player.y = player.y - 24; } //ジャンプフラグが立っている場合 if (jflag == true) { //現在のy座標を一時分に保存 player.y_temp = player.y; //現在y += (現在y - 前回y) + 1 player.y += (player.y - player.y_prev) + 1; //一時保存のy座標を前回分に保存 player.y_prev = player.y_temp; //現在のy座標が480 - (64 / 2)の場合 if (player.y == 480 - (64 / 2)) { //ジャンプフラグを元に戻す jflag = false; } } //右キーが押下された場合 if (Key[KEY_INPUT_RIGHT] == 1) { //右フラグ player.flag = 1; //左キーが押下された場合 } else if (Key[KEY_INPUT_LEFT] == 1) { //左フラグ player.flag = 2; //押下されなかった場合 } else { //停止フラグ player.flag = 0; } if (player.flag == 2) { if (sflag == true) { player.img = Handle_p[13]; } else { //xを減らす player.x--; player.fflag = 2; if (jflag == true) { player.img = Handle_p[12]; } else { //x座標に合わせた画像を指定 player.img = Handle_p[(player.x % 64) / 16 + 8]; } } } else if (player.flag == 1) { if (sflag == true) { player.img = Handle_p[5]; } else { //xを増やす player.x++; player.fflag = 1; if (jflag == true) { player.img = Handle_p[4]; } else { //x座標に合わせた画像を指定 player.img = Handle_p[(player.x % 64) / 16]; } } } else if (player.fflag == 2) { if (sflag == true) { player.img = Handle_p[13]; } else if (jflag == true) { player.img = Handle_p[12]; } else { player.img = Handle_p[8]; } } else { if (sflag == true) { player.img = Handle_p[5]; } else if (jflag == true) { player.img = Handle_p[4]; } else { player.img = Handle_p[0]; } } } //描画 void Player_Draw() { //タイトル描画 DrawStringToHandle(20, 20, "アクションゲーム", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); //画像描画 DrawGraph(player.x - (64 / 2), player.y - (64 / 2), player.img, TRUE); } //終了処理 void Player_Finalize() { DeleteGraph(player.img); } //-------------------------------------------------- //Player.h #ifndef DEF_PLAYER_H #define DEF_PLAYER_H //初期化 void Player_Initialize(); //計算 void Player_Update(); //描画 void Player_Draw(); //終了処理 void Player_Finalize(); #endif //-------------------------------------------------- //Enemy.cpp #include "DxLib.h" #include "Enemy.h" //エネミー画像用 typedef struct { int x, y, img; } enemy_t; enemy_t enemy; int Handle_e[16]; //初期化 void Enemy_Initialize() { //画像ファイルロード LoadDivGraph("./Image/enemy.png", 16, 4, 4, 64, 64, Handle_e); //エネミー座標 enemy.x = 640 - (64 / 2); enemy.y = 480 - (64 / 2); } //計算 void Enemy_Update() { //エネミー移動制御 if (enemy.y < (64 / 2)) { enemy.y = (64 / 2); } if (enemy.y + (64 / 2) > 480) { enemy.y = 480 - (64 / 2); } //xを減らす enemy.x--; //x座標に合わせた画像を指定 enemy.img = Handle_e[(enemy.x % 64) / 16]; } //描画 void Enemy_Draw() { //画像描画 enemy.img = Handle_e[0]; DrawGraph(enemy.x - (64 / 2), enemy.y - (64 / 2), enemy.img, TRUE); } //終了処理 void Enemy_Finalize() { DeleteGraph(enemy.img); } //-------------------------------------------------- //Enemy.h #ifndef DEF_ENEMY_H #define DEF_ENEMY_H //初期化 void Enemy_Initialize(); //計算 void Enemy_Update(); //描画 void Enemy_Draw(); //終了処理 void Enemy_Finalize(); #endif //-------------------------------------------------- //Collision.cpp #include "DxLib.h" #include "Player.h" #include "Enemy.h" #include "Collision.h" //横の当たり判定 int CheckHitWidth() { int L1 = player.x; int R1 = player.x + 64; int L2 = enemy.x; int R2 = enemy.x + 64; if (R1 < L2 || R2 < L1) { //当たっていない return 0; } else { //当たっている DrawStringToHandle(20, 400, "Game Over", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); return 1; } } //縦の当たり判定 int CheckHitHeight() { int U1 = player.y; int D1 = player.y + 64; int U2 = enemy.y; int D2 = enemy.y + 64; if (D1 < U2 || D2 < U1) { //当たっていない return 0; } else { //当たっている DrawStringToHandle(20, 400, "Game Clear", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); return 2; } } //-------------------------------------------------- //Collision.h #ifndef DEF_COLLISION_H #define DEF_COLLISION_H //横の当たり判定 int CheckHitWidth(); //縦の当たり判定 int CheckHitHeight(); #endif

試したこと

「#include」に何らかの問題があるのかと思い文を見直してみましたがおかしいと思う部分は発見できず、インターネット上で調べても解決に役立ちそうなページは発見できませんでした。

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

Microsoft Visual C++ 2019
DXライブラリ Windows版 Visual C++用 Ver3.22c

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

DXライブラリ

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