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

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

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

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

DXライブラリ

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

Q&A

解決済

1回答

3682閲覧

外部シンボルが未解決というエラーが出てしまう

ozawa252521

総合スコア7

Visual C++

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

DXライブラリ

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

0グッド

0クリップ

投稿2020/10/23 05:41

編集2020/10/29 14:28

https://bituse.info/game/shot/9
こちらのサイトを参考にシュミレーションゲームを制作しようとしています

それで、敵を追加する項目でg_count;という拡張子が見当たらないとエラーが出てしまったでサイトをよく見ると

『まず、最初に説明しておかなければならないのは、変数g_countです。
これはゲームが開始してから何ループしたのかを表す変数です。
これはmain.cppでグローバル変数として定義し、define.hでextern宣言して共有できるようにしています。』

と説明されていたので
main.cpp に int g_count; と追加し
define.h に extern int g_count; と追加したところ見たことないエラーが出てしまい色々試したのですが解決できません。
どなたか分かる方助けてほしいです。

追記
あれからc言語の基礎など学んだりしたのですが未だに進めていません。
どなたか解決方法をお願いしたいです。

エラーメッセージ

1>------ ビルド開始: プロジェクト: gamegame, 構成: Release Win32 ------ 1>back.cpp 1>control.cpp 1>enemy.cpp 1>main.cpp 1>pch.cpp 1>player.cpp 1>control.obj : error LNK2001: 外部シンボル "int g_count" (?g_count@@3HA) は未解決です 1>C:\Users\rikua\source\repos\gamegame\Release\gamegame.exe : fatal error LNK1120: 1 件の未解決の外部参照 1>プロジェクト "gamegame.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

main.cpp

#include "pch.h" #include "control.h" //キー取得用配列 char key[256]; // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } CONTROL *control = new CONTROL; while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){ control->All(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

define.h

#include <windows.h> //プレイヤーの歩くスピード #define PLAYER_SPEED 5 #define MARGIN 10 //メッセージボックス #define MSG(m) {\ MessageBox(NULL,m,"メッセージ",MB_OK);} //extern宣言してkey配列にどこからでもアクセスできるようにする extern char key[256]; extern int g_count; #pragma once #define PSHOT_NUM 20 #define PSHOT_SPEED 14 struct SHOT { bool flag;//弾が発射中かどうか double x;//x座標 double y;//y座標 int gh;//グラフィックハンドル int width, height;//画像の幅と高さ };

enemy.cpp

#include "pch.h" #include "enemy.h" ENEMY::ENEMY() { LoadDivGraph("enemy.png", 3, 1, 3, 27, 25, gh); width = 27; height = 25; x = 50; y = -50; in_time = 180; stop_time = 300; out_time = 420; count = 0; endflag = false; } void ENEMY::Move() { //出てきてから止まる時間までの間なら下に移動 if (in_time < g_count && g_count < stop_time) { y += 2; //帰還時間を過ぎたら戻る。 } else if (g_count > out_time) { y -= 2; if (y < -40) { endflag = true; } } } void ENEMY::Draw() { int temp; if (!endflag) { temp = count % 40 / 10; if (temp == 3) temp = 1; DrawGraph(x, y, gh[temp], TRUE); } } bool ENEMY::All() { Move(); Draw(); ++count; return endflag; }

enemy.h

#include "pch.h" class ENEMY { private: double x, y; int gh[3]; int width, height; int in_time, stop_time, out_time; int count; bool endflag; public: bool All(); void Move(); void Draw(); ENEMY(); };

control.cpp

#include "pch.h" #include "control.h" CONTROL::CONTROL() { //プレイヤークラスの生成 player = new PLAYER; back = new BACK; } CONTROL::~CONTROL() { //プレイヤークラスの解放 delete player; } void CONTROL::All() { //描画領域を指定 SetDrawArea(MARGIN, MARGIN, MARGIN + 380, MARGIN + 460); back->All(); player->All(); if (enemy != NULL) { if (enemy->All()) { delete enemy; enemy = NULL; } } ++g_count; } コード

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

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

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

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

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

m.ts10806

2020/10/23 06:32

「Webサイト」タグは本件と無関係かと思います。
ozawa252521

2020/10/23 06:38

ありがとうございます!
fana

2020/10/23 06:50

エラーとは関係ありませんが, 参考先の文章: > まず、最初に説明しておかなければならないのは、変数g_countです。 > これはゲームが開始してから何ループしたのかを表す変数です。 > これはmain.cppでグローバル変数として定義し、define.hでextern宣言して共有できるようにしています。 > 実際のカウント数の増加はcontrol.hのAll関数で行っています。 から,とりあえず g_count の型が char では役割に対して厳しいのではないだろうか,と思う. (しかし,main.cppでは全く参照もしない外部変数を main.cpp に設けて,その更新は CONTROL とかいうクラスが担い,不特定多数(?)が参照するとか,何かすさまじいな…)
ozawa252521

2020/10/23 07:06

適した役割の型があるということですね。ありがとうございます。調べてみます
fana

2020/10/23 07:12

なんとなくアドバイスみたいな: (1)まず,こういうサイトを「参考にする」ためには,そこに書かれている話を「読める」必要があるわけで,それには最低限の基礎が必要. 今の状態は「参考にすることができていない状態」なので,目の前のエラーをどうにか解消できたとしてもすぐにまた行き詰るだろう. 今やっていることは一旦忘れて,基礎を先に固めるべき.その方が早い. (2)私ならそのサイトは絶対に参考にしない.
ozawa252521

2020/10/23 07:32

(2)おぉ・・そうなんですね・・ご指摘ありがとうございます!
yuki23

2020/10/23 10:53

そのサイトにも「このページで学習するには、C言語とC++についての知識がある程度必要になります。」ってちゃんと書いてありますしね。入門書くらい読んでからにしましょう
ozawa252521

2020/10/29 14:28

一通り勉強したのですがどうしても解決できないです・・
guest

回答1

0

ベストアンサー

とにかく目の前のエラーだけ解決したいのであれば、
ソースファイルを複数に分割するのはやめて、1つのソースファイルに全部の実装を書くようにしてください。

ここからは忠告ですが、そのサイトははっきり言ってあなたのレベルに合っていません。
たとえこのエラーが解決できたとしても、次のページで必ずつまずくと思います。
そもそも、初心者が読んで理解できるように書かれているとも思えませんので、私なら他人に勧めません。
読んで理解できないものは、さっさと諦めてまともな書籍などを探したほうが今後のためだと思います。

投稿2020/10/29 14:55

yuki23

総合スコア1448

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問