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

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

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

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

C++

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

DXライブラリ

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

Q&A

解決済

1回答

17039閲覧

識別子が見つからない、定義されてないと出てしまう。

ozawa252521

総合スコア7

Visual C++

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

C++

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

DXライブラリ

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

0グッド

0クリップ

投稿2020/10/22 02:09

https://bituse.info/game/shot/5

こちらのサイトを参考にしてシューティングゲームを作っています。

背景を線画したいのですがうまくいきません。

class BACK { private: //座標 double x, y; //グラフィックハンドル int gh; private: void Draw(); public: void All(); BACK(); }; BACK::BACK() { gh = LoadGraph("back1.png"); x = y = MARGIN; } void BACK::Draw() { DrawGraph(x, y, gh, FALSE); } void BACK::All() { Draw(); }

サイトの通りに新しくbackというクラスを作りこちらをデバックすると

1>------ ビルド開始: プロジェクト: gamegame, 構成: Release Win32 ------ 1>back.cpp 1>C:\Users\rikua\source\repos\gamegame\back.h(17,7): error C3861: 'LoadGraph': 識別子が見つかりませんでした 1>C:\Users\rikua\source\repos\gamegame\back.h(19,10): error C2065: 'MARGIN': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\back.h(23,22): error C2065: 'FALSE': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\back.h(23,2): error C3861: 'DrawGraph': 識別子が見つかりませんでした 1>control.cpp 1>main.cpp 1>プロジェクト "gamegame.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

このようなエラーが起きてしまいます。
おそらくこちらの↓内容が見つかっていないと言われていると思うのですが
書く場所が間違っているのでしょうか?

BACK::BACK() { gh = LoadGraph("back1.png"); x = y = MARGIN; } void BACK::Draw() { DrawGraph(x, y, gh, FALSE); } void BACK::All() { Draw(); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

使う識別子が定義されているヘッダファイルを先にインクルードしないとダメです。
エラーにある定義されていない識別子が、どのファイルで定義されているかを調べてください。

c++

1BACK::BACK() 2{ 3 gh = LoadGraph("back1.png"); 4 5 x = y = MARGIN; 6} 7void BACK::Draw() 8{ 9 DrawGraph(x, y, gh, FALSE); 10} 11void BACK::All() 12{ 13 Draw(); 14}

このへんの関数の実体は、通常ヘッダではなくcppファイルに記述します。

投稿2020/10/22 02:15

編集2020/10/22 02:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ozawa252521

2020/10/22 02:26

インクルードというものを探してみたのですが back.cppというファイルの中に #include "back.h" とだけ書いてあります。 ほかの識別子は見当たらないです・・・
ozawa252521

2020/10/22 02:29

ためしにback.cppというファイルの中に #include "back.h" BACK::BACK() { gh = LoadGraph("back1.png"); x = y = MARGIN; } void BACK::Draw() { DrawGraph(x, y, gh, FALSE); } void BACK::All() { Draw(); } こちらを書いてみたのですが同じようなエラーが出てきてしまいました・・
退会済みユーザー

退会済みユーザー

2020/10/22 02:38 編集

他のインクルードファイルも調べましたか? 別のcppがコンパイル通っているなら、そちらが何をインクルードしているか見てみると良いと思います。
ozawa252521

2020/10/22 02:43 編集

一つだけ似ているファイルがありました! player.cppというファイルで DrawGraphやMARGIなどありますね そこで一番したに先ほどの文章を追加してみたのですが #include "pch.h" #include "player.h" PLAYER::PLAYER() { //画像読み込み if (-1 == LoadDivGraph("shot_chara.png", 12, 3, 4, 29, 40, gh)) { MSG("エラー発生"); } width = 29; height = 40; //移動係数 move = 1.0f; //横方向と縦方向のカウント数。 xcount = 0, ycount = 0; //添字用変数 ix = 0, iy = 0, result = 0; //初期位置 x = 180; y = 400; life = true; } void PLAYER::Move() { if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) { if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) { //移動係数を0.71に設定 move = 0.71f; } else { //斜めじゃなければ1.0に設定 move = 1.0f; } } else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) { move = 1.0f; } if (key[KEY_INPUT_LEFT] == 1) { x -= (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_RIGHT] == 1) { x += (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_UP] == 1) { y -= (int)PLAYER_SPEED * move; } if (key[KEY_INPUT_DOWN] == 1) { y += (int)PLAYER_SPEED * move; } //キャラの移動制御 if (x > 400 - MARGIN) { x = 400 - MARGIN; } else if (x < MARGIN) { x = MARGIN; } if (y > 480 - height / 2 - MARGIN) { y = 480 - height / 2 - MARGIN; } else if (y < height / 2 + MARGIN) { y = height / 2 + MARGIN; } //左キーが押されてて、かつxcountが0以上なら0にしてから1引く。 //それ以外は1引く if (key[KEY_INPUT_LEFT] == 1) { if (xcount > 0) xcount = 0; --xcount; } //右キーが押されてて、かつxcountが0以下なら0にしてから1足す。 //それ以外は1引く if (key[KEY_INPUT_RIGHT] == 1) { if (xcount < 0) xcount = 0; ++xcount; } //上キーが押されてて、かつycountが0以上なら0にしてから1引く。 //それ以外は1引く if (key[KEY_INPUT_UP] == 1) { if (ycount > 0) ycount = 0; --ycount; } //下キーが押されてて、かつycountが0以下なら0にしてから1足す。 //それ以外は1足す if (key[KEY_INPUT_DOWN] == 1) { if (ycount < 0) ycount = 0; ++ycount; } //カウント数から添字を求める。 ix = abs(xcount) % 30 / 10; iy = abs(ycount) % 30 / 10; //xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。 if (xcount > 0) { ix += 3; result = ix; } else if (xcount < 0) { //マイナスなら左向きなので、4行目の先頭添字番号を足す。 ix += 9; result = ix; } //yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。 if (ycount > 0) { iy += 6; result = iy; } else if (ycount < 0) { //1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました) iy += 0; result = iy; } //斜め移動の場合は横顔を優先 if (move == 0.71f) result = ix; //描画 DrawGraph(x - width / 2, y - height / 2, gh[result], TRUE); //押されてなければカウントをゼロにする。 if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) { xcount = 0; } if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) { ycount = 0; } } void PLAYER::Draw() { //生きてれば描画 if (life) { //描画 DrawGraph(x - width / 2, y - height / 2, gh[result], TRUE); } } void PLAYER::All() { Move(); Draw(); } このようになり、こちらをデバックすると >C:\Users\rikua\source\repos\gamegame\player.cpp(175,11): error C2653: 'BACK': 識別子がクラス名でも名前空間名でもありません。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(176,1): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>C:\Users\rikua\source\repos\gamegame\player.cpp(177,2): error C2065: 'gh': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(179,2): error C2065: 'x': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(179,6): error C2065: 'y': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(180,1): warning C4508: 'BACK': 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(181,16): error C2653: 'BACK': 識別子がクラス名でも名前空間名でもありません。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(183,12): error C2065: 'x': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(183,15): error C2065: 'y': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(183,18): error C2065: 'gh': 定義されていない識別子です。 1>C:\Users\rikua\source\repos\gamegame\player.cpp(185,15): error C2653: 'BACK': 識別子がクラス名でも名前空間名でもありません。 とさらにエラーが出てしまいました
退会済みユーザー

退会済みユーザー

2020/10/22 02:58 編集

C言語、C++の基本のヘッダファイルの役割は理解していますか? もし判らないのであれば、そちらの勉強を先にした方がいいと思います。 参考にしているサイトも、 > このページで学習するには、 > C言語とC++についての知識がある程度必要になります。 > 心配な方はトップページなどから、該当言語のページを選んで基礎を学んできてください。 と前置きがありますよ。 基本を理解せずに始めても、何度も同じような質問を繰り返して遠回りになるだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問