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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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++言語用のゲームライブラリです。

Q&A

解決済

2回答

19718閲覧

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

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++言語用のゲームライブラリです。

0グッド

0クリップ

投稿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++

1//main.cpp 2 3#include "DxLib.h" 4#include "Player.h" 5#include "Enemy.h" 6#include "Collision.h" 7 8//初期ウィンドウサイズは640x480 9 10//キー押下フレーム数 11char Key[256]; 12 13int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 14 LPSTR lpCmdLine, int nCmdShow) { 15 if (ChangeWindowMode(TRUE) != 0) { 16 return 0; 17 } 18 if (DxLib_Init() != 0) { 19 return 0; 20 } 21 if (SetDrawScreen(DX_SCREEN_BACK) != 0) { 22 return 0; 23 } 24 if (SetBackgroundColor(0, 255, 0) != 0) { 25 return 0; 26 } 27 28 //音楽ファイルロード 29 int Handle_bgm = LoadSoundMem("./Audio/famipop3.mp3"); 30 31 //音楽再生 32 PlaySoundMem(Handle_bgm, DX_PLAYTYPE_LOOP); 33 34 Player_Initialize(); 35 36 Enemy_Initialize(); 37 38 while (1) { 39 if (ScreenFlip() != 0) { 40 break; 41 } 42 if (ProcessMessage() != 0) { 43 break; 44 } 45 if (ClearDrawScreen() != 0) { 46 break; 47 } 48 if (GetHitKeyStateAll(Key) != 0) { 49 break; 50 } 51 52 Player_Update(); 53 54 Enemy_Update(); 55 56 CheckHitWidth(); 57 58 CheckHitHeight(); 59 60 Player_Draw(); 61 62 Enemy_Draw(); 63 } 64 65 Player_Finalize(); 66 67 Enemy_Finalize(); 68 69 //DXライブラリ終了処理 70 DxLib_End(); 71 72 return 0; 73} 74 75//-------------------------------------------------- 76 77//Player.cpp 78 79#include "DxLib.h" 80#include "Player.h" 81 82//プレイヤー画像用 83typedef struct { 84 int x, y, y_prev, y_temp, flag, fflag, img; 85} player_t; 86player_t player; 87int Handle_p[16]; 88bool jflag = false; 89bool sflag = false; 90 91//フォントデータロード 92int Font = CreateFontToHandle("メイリオ", 32, 4, DX_FONTTYPE_ANTIALIASING_EDGE); 93 94//初期化 95void Player_Initialize() { 96 //画像ファイルロード 97 LoadDivGraph("./Image/player.png", 16, 4, 4, 64, 64, Handle_p); 98 99 //プレイヤー座標 100 player.x = 64 / 2; 101 player.y = 480 - (64 / 2); 102 player.y_prev = 0; 103 player.y_temp = 0; 104 105 //フラグ 106 player.flag = 0; 107 player.fflag = 0; 108} 109 110//計算 111void Player_Update() { 112 //プレイヤー移動制御 113 if (player.x < (64 / 2)) { 114 player.x = (64 / 2); 115 } 116 if (player.x + (64 / 2) > 640) { 117 player.x = 640 - (64 / 2); 118 } 119 if (player.y < (64 / 2)) { 120 player.y = (64 / 2); 121 } 122 if (player.y + (64 / 2) > 480) { 123 player.y = 480 - (64 / 2); 124 } 125 126 //下キーが押下された場合 127 if (Key[KEY_INPUT_DOWN] == 1) { 128 //しゃがみフラグ 129 sflag = true; 130 } else { 131 sflag = false; 132 } 133 134 //上キーが押下され現在のy座標が480 - (64 / 2)でしゃがみフラグが立っていない場合 135 if (Key[KEY_INPUT_UP] == 1 && player.y == 480 - (64 / 2) && sflag == false) { 136 //ジャンプフラグ 137 jflag = true; 138 //現在のy座標を前回分に保存 139 player.y_prev = player.y; 140 //現在のy座標を24減らす 141 player.y = player.y - 24; 142 } 143 144 //ジャンプフラグが立っている場合 145 if (jflag == true) { 146 //現在のy座標を一時分に保存 147 player.y_temp = player.y; 148 //現在y += (現在y - 前回y) + 1 149 player.y += (player.y - player.y_prev) + 1; 150 //一時保存のy座標を前回分に保存 151 player.y_prev = player.y_temp; 152 //現在のy座標が480 - (64 / 2)の場合 153 if (player.y == 480 - (64 / 2)) { 154 //ジャンプフラグを元に戻す 155 jflag = false; 156 } 157 } 158 159 //右キーが押下された場合 160 if (Key[KEY_INPUT_RIGHT] == 1) { 161 //右フラグ 162 player.flag = 1; 163 //左キーが押下された場合 164 } else if (Key[KEY_INPUT_LEFT] == 1) { 165 //左フラグ 166 player.flag = 2; 167 //押下されなかった場合 168 } else { 169 //停止フラグ 170 player.flag = 0; 171 } 172 173 if (player.flag == 2) { 174 if (sflag == true) { 175 player.img = Handle_p[13]; 176 } else { 177 //xを減らす 178 player.x--; 179 player.fflag = 2; 180 if (jflag == true) { 181 player.img = Handle_p[12]; 182 } else { 183 //x座標に合わせた画像を指定 184 player.img = Handle_p[(player.x % 64) / 16 + 8]; 185 } 186 } 187 } else if (player.flag == 1) { 188 if (sflag == true) { 189 player.img = Handle_p[5]; 190 } else { 191 //xを増やす 192 player.x++; 193 player.fflag = 1; 194 if (jflag == true) { 195 player.img = Handle_p[4]; 196 } else { 197 //x座標に合わせた画像を指定 198 player.img = Handle_p[(player.x % 64) / 16]; 199 } 200 } 201 } else if (player.fflag == 2) { 202 if (sflag == true) { 203 player.img = Handle_p[13]; 204 } else if (jflag == true) { 205 player.img = Handle_p[12]; 206 } else { 207 player.img = Handle_p[8]; 208 } 209 } else { 210 if (sflag == true) { 211 player.img = Handle_p[5]; 212 } else if (jflag == true) { 213 player.img = Handle_p[4]; 214 } else { 215 player.img = Handle_p[0]; 216 } 217 } 218} 219 220//描画 221void Player_Draw() { 222 //タイトル描画 223 DrawStringToHandle(20, 20, "アクションゲーム", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 224 225 //画像描画 226 DrawGraph(player.x - (64 / 2), player.y - (64 / 2), player.img, TRUE); 227} 228 229//終了処理 230void Player_Finalize() { 231 DeleteGraph(player.img); 232} 233 234//-------------------------------------------------- 235 236//Player.h 237 238#ifndef DEF_PLAYER_H 239 240#define DEF_PLAYER_H 241 242//初期化 243void Player_Initialize(); 244 245//計算 246void Player_Update(); 247 248//描画 249void Player_Draw(); 250 251//終了処理 252void Player_Finalize(); 253 254#endif 255 256//-------------------------------------------------- 257 258//Enemy.cpp 259 260#include "DxLib.h" 261#include "Enemy.h" 262 263//エネミー画像用 264typedef struct { 265 int x, y, img; 266} enemy_t; 267enemy_t enemy; 268int Handle_e[16]; 269 270//初期化 271void Enemy_Initialize() { 272 //画像ファイルロード 273 LoadDivGraph("./Image/enemy.png", 16, 4, 4, 64, 64, Handle_e); 274 275 //エネミー座標 276 enemy.x = 640 - (64 / 2); 277 enemy.y = 480 - (64 / 2); 278} 279 280//計算 281void Enemy_Update() { 282 //エネミー移動制御 283 if (enemy.y < (64 / 2)) { 284 enemy.y = (64 / 2); 285 } 286 if (enemy.y + (64 / 2) > 480) { 287 enemy.y = 480 - (64 / 2); 288 } 289 290 //xを減らす 291 enemy.x--; 292 //x座標に合わせた画像を指定 293 enemy.img = Handle_e[(enemy.x % 64) / 16]; 294} 295 296//描画 297void Enemy_Draw() { 298 //画像描画 299 enemy.img = Handle_e[0]; 300 DrawGraph(enemy.x - (64 / 2), enemy.y - (64 / 2), enemy.img, TRUE); 301} 302 303//終了処理 304void Enemy_Finalize() { 305 DeleteGraph(enemy.img); 306} 307 308//-------------------------------------------------- 309 310//Enemy.h 311 312#ifndef DEF_ENEMY_H 313 314#define DEF_ENEMY_H 315 316//初期化 317void Enemy_Initialize(); 318 319//計算 320void Enemy_Update(); 321 322//描画 323void Enemy_Draw(); 324 325//終了処理 326void Enemy_Finalize(); 327 328#endif 329 330//-------------------------------------------------- 331 332//Collision.cpp 333 334#include "DxLib.h" 335#include "Player.h" 336#include "Enemy.h" 337#include "Collision.h" 338 339//横の当たり判定 340int CheckHitWidth() { 341 int L1 = player.x; 342 int R1 = player.x + 64; 343 int L2 = enemy.x; 344 int R2 = enemy.x + 64; 345 if (R1 < L2 || R2 < L1) { 346 //当たっていない 347 return 0; 348 } else { 349 //当たっている 350 DrawStringToHandle(20, 400, "Game Over", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 351 return 1; 352 } 353} 354 355//縦の当たり判定 356int CheckHitHeight() { 357 int U1 = player.y; 358 int D1 = player.y + 64; 359 int U2 = enemy.y; 360 int D2 = enemy.y + 64; 361 if (D1 < U2 || D2 < U1) { 362 //当たっていない 363 return 0; 364 } else { 365 //当たっている 366 DrawStringToHandle(20, 400, "Game Clear", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 367 return 2; 368 } 369} 370 371//-------------------------------------------------- 372 373//Collision.h 374 375#ifndef DEF_COLLISION_H 376 377#define DEF_COLLISION_H 378 379//横の当たり判定 380int CheckHitWidth(); 381 382//縦の当たり判定 383int CheckHitHeight(); 384 385#endif

試したこと

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

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

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

Collision.cpp 内の関数内にて

int L1 = player.x;

等と書かれていますが,この記述では,

  • player とは何なのか? (→ Player.cpp内に定義されている外部変数の名前であるが…)
  • player とはどんな型なのか? (→ Player.cpp内にて定義されているstructだが…)

の2点を解決する必要があります.
enemy側も同様です.
(それが解決できていないのがエラーの原因)


Collision.cpp 内の関数の実装を見るに,
外部変数をダイレクトに触らなくとも,player.x や player.y の値さえ知ることができればよい様子ですから,

  • int GetPlayerX() : player.xの値を返す
  • int GetPlayerY() : player.yの値を返す

のような関数を player.cpp に用意してやり(そして player.h にそれらの宣言を書き),Collision.cpp側では,これらの関数を呼べば済むのではないでしょうか.

投稿2021/04/12 10:01

fana

総合スコア11996

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

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

fkcz_yfm_carp

2021/04/12 11:41

ありがとうございます。 Player.cppに int GetPlayerX = player.x; Player.hに int GetPlayerX; と加え(GetPlayerYやGetEnemyX, Yも同様です)Collision.cppの当たり判定のplayer.xもGetPlayerXに修正した結果、エラーを表すコード上の赤い波線は消えましたがデバッグビルドしてみたところ「再定義されました。」というエラーが表示されました。。。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2086 'int GetEnemyX': 再定義されました。 Action_Game Enemy.cpp 12 エラー C2086 'int GetEnemyY': 再定義されました。 Action_Game Enemy.cpp 13 エラー C2086 'int GetPlayerX': 再定義されました。 Action_Game Player.cpp 16 エラー C2086 'int GetPlayerY': 再定義されました。 Action_Game Player.cpp 17
fana

2021/04/13 01:22 編集

うーん,この様子だと,物作る前にちょっとC/C++言語の基礎的な事柄の復習をした方がいいんじゃないか?と思えます. 「関数を用意すればよくね?」という話なので,その話を試すならば関数を書きましょう. > int GetPlayerX = player.x; これでは,新しい変数 GetPlayerX が増えただけですし,player.x の値が変化しても GetPlayerX の値がそれに追従するわけでもないですから,役に立たないでしょう. Player.cppに書く関数定義としては,例えば int GetPlayerX(){ return player.x; } といったものになります. この関数を呼べば,結果として player.x の(その時点における)値を関数の戻りとして得られる,という点は大丈夫ですか? で,この関数を呼ぶためには 「関数の宣言(プロトタイプ宣言)がその関数を呼ぶ箇所よりも前に存在する必要がある」というC/C++言語のルールを満たす必要がある(という話もOK?). これは,最も単純には,Collision.cpp の先頭の方に int GetPlayerX(); //プロトタイプ宣言 とかダイレクトに書いてしまえばまぁ良いわけですが, 回答文内では(それと同等のことになる話として)このプロトタイプ宣言は player.h の方に書いてやればいいんじゃないか,としています. (現状,Collision.cppで player.h を include してますし.)
dodox86

2021/04/13 01:40

別回答でのfanaさんの[2021/04/12 17:45]のコメント > player_t という型の定義は Player.cpp にある. > なので,Collision.cpp 内に,「player_t 型の player っていうインスタンスがどこかにあってさー…」と書いても「player_t 型って何やねん?」という話になる. > player_t 型の定義を何らかのヘッダにでも移して,player_t型を知る必要があるcpp群でそれをincludeするとかすれば良いかと. > (enemy_t の側も同様) が言わば本質的な部分での指摘だと思えるのですが、質問者さんはまだピンと来ていないのでしょうね。いちコンパイル単位で、C++コンパイラはその型を知っている必要があるが、それが分からないから「定義されていない識別子です。」エラーになる。場当たり的に修正しても解決できない(或いは解決できても、理由が分からない)かもしれません。
fana

2021/04/13 01:47

一旦,今のプログラムは置いといて,cppが2つくらいの小さいテストプログラムか何かで諸々復習すると良いんじゃないかな?
fkcz_yfm_carp

2021/04/13 11:29

Player.cppで int GetPlayerX() { return player.x; } Player.hで int GetPlayerX(); とそれぞれ修正しました、その結果 //12行目 int L1 = GetPlayerX; 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2440 '初期化中': 'int (__cdecl *)(void)' から 'int' に変換できません。 Action_Game Collision.cpp 12 //13行目 int R1 = GetPlayerX + 64; 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2296 '+': 無効です。左オペランドには型 'int (__cdecl *)(void)' が指定されています。 Action_Game Collision.cpp 13 このようになりました。 > この関数を呼べば,結果として player.x の(その時点における)値を関数の戻りとして得られる,という点は大丈夫ですか? > で,この関数を呼ぶためには「関数の宣言(プロトタイプ宣言)がその関数を呼ぶ箇所よりも前に存在する必要がある」というC/C++言語のルールを満たす必要がある(という話もOK?). > #include とは何か? という話も不安であれば把握された方がよいかと. このあたりの話は分かります、添付して頂いた質問の回答にも初めて見るようなものは特にありませんでした。。。 ちなみに試しにplayer_t型の定義をヘッダーファイルに移してみたところ 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2005 "struct player_t player" (?player@@3Uplayer_t@@A) は既に Collision.obj で定義されています。 Action_Game main.obj 1 これと同じようなエラーがいくつも出ました。 本質的、根本的なエラーの原因はまだピンと来ないです。。。
fkcz_yfm_carp

2021/04/13 11:42

epistemeさんの別回答についてですが extern player_t player; とすると 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C4430 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません Action_Game Collision.cpp 6 エラー C2146 構文エラー: ';' が、識別子 'player' の前に必要です。 Action_Game Collision.cpp 6 とエラーが出るためエラーが出ない extern struct player_t player; としています。
fana

2021/04/14 01:11

int GetPlayerX(); なる関数を呼ぶ記述は > int L1 = GetPlayerX; ではない,ということからわからない状況なのであれば, さすがにもう「まずは使う言語の文法を一から学ぶべき」というアドバイスしかできない. 失礼な言い方かもしれないけども,このような場でやりとりできる状態に達していないものと見受ける. 先にC言語の入門的な本なりサイトなりで2時間~2日程度の学習を行った方が絶対早い. (質問文に提示されているコードが書けるのならば,こんな状態はあり得ないと思えるのだが…??)
fana

2021/04/14 01:24

> 本質的、根本的なエラーの原因 は既に述べられている. 元々のエラー > 'player': 定義されていない識別子です というのは,変数(名) player の通用範囲の問題だ. 変数の名前が通用する範囲には制限がある.「通用範囲」とか「スコープ」とかで調べると良い. ちなみに,その後のエラーについては,以下のような話であり,いずれも基礎中の基礎を抑えていれば他人に訊くまでもない話. 「宣言」とか「定義」とかいう話の理解が根本的にあやふやなのだと見える. > エラー C2146 構文エラー: ';' が、識別子 'player' の前に必要です。 Collision.cpp に,player_t 型の定義が必要となる記述を行ったが, その player_t 型の定義が Collision.cpp から見えていない. > エラー C2440 '初期化中': 'int (__cdecl *)(void)' から 'int' に変換できません。 前述のように,関数を呼び出す記述の文法が間違っている. > エラー LNK2005 "struct player_t player" (?player@@3Uplayer_t@@A) は既に Collision.obj で定義されています。 (コードがどんな状態になったのか不明瞭だが)多重定義になったのだろう.
fana

2021/04/14 01:28

邪推するに,元々ファイルが複数のcppに分かれているコードをどこかから引っ張ってきて,それをスタート地点にしようとしているように見えるが, そこから開始するのはやや難易度が高すぎると思う. そうでなくても各種基礎的な事柄の習得が必要そうなので, 分割コンパイル(複数のcppに分けて書く話)の件が問題を複雑にしないように,まずは単一のソースコードで完結しているような例を探してスタート地点にした方がよいのではないだろうか.
fkcz_yfm_carp

2021/04/14 04:28

このコードは学習サイトを参考にしながら自分で書いた後に複数に分割したものです。 元々JavaをやっていてC++に移ったのである程度は書けましたが。。。 一度C言語の基本的なところから復習してみます。 ありがとうございました。
guest

0

グローバル変数 player と enemy の存在を Collision.cpp は知らないのでしょう。

Collision.cpp の #include 部の直後あたりに

extern player_t player;
extern enemy_t enemy;

を追加してみてはいかがかと。

投稿2021/04/10 08:06

episteme

総合スコア16612

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

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

fkcz_yfm_carp

2021/04/11 07:23 編集

追加してみたところplayerとenemyのエラーが以下のように変わりました。 FontとKeyについては変わらずでした。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C4430 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません Action_Game Collision.cpp 6 エラー C2146 構文エラー: ';' が、識別子 'player' の前に必要です。 Action_Game Collision.cpp 6 エラー C4430 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません Action_Game Collision.cpp 7 エラー C2146 構文エラー: ';' が、識別子 'enemy' の前に必要です。 Action_Game Collision.cpp 7
episteme

2021/04/11 07:32 編集

Font, Key についても同様、extern int Font; extern char Key[256];
fkcz_yfm_carp

2021/04/12 07:46

ありがとうございます、Font, Keyのエラーは無事に消えました。 player. enemyの方は追加文を extern struct player_t player; extern struct enemy_t enemy; としてみたところエラーは以下のようになりました。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2027 認識できない型 'player_t' が使われています。 Action_Game Collision.cpp 12, 13, 28, 29 エラー C2027 認識できない型 'enemy_t' が使われています。 Action_Game Collision.cpp 14, 15, 30, 31 何度も質問してしまい申し訳ないです。
episteme

2021/04/12 08:25

extern player_t player; extern enemy_t enemy; じゃなくて?
fana

2021/04/12 08:45

player_t という型の定義は Player.cpp にある. なので,Collision.cpp 内に,「player_t 型の player っていうインスタンスがどこかにあってさー…」と書いても「player_t 型って何やねん?」という話になる. player_t 型の定義を何らかのヘッダにでも移して,player_t型を知る必要があるcpp群でそれをincludeするとかすれば良いかと. (enemy_t の側も同様)
episteme

2021/04/12 08:53

型の定義が(.hじゃなく).cppにあるんか。 それだとダメなんだが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問