プログラムの分割について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
脱出

プログラムの分割について

#1

投稿記事 by 脱出 » 16年前

この前脱出ゲームの事で質問したものですが。
とりあえず完成してプログラムがひとつのファイルだったんですが、
次ぎ作るゲームのために分割の練習をしようと思い、
メインの処理とその他とextern宣言のファイルに分けたんですが、
なぜか上手くいかずいろいろやってみてもできません。
またどこが悪いのか分からずファイルのUPなんですがよろしくお願いします。
プログラムの中身を動かしたりしていろいろやっていたのでちょっとぐちゃぐちゃかもしれません。

BEMANI

Re:プログラムの分割について

#2

投稿記事 by BEMANI » 16年前

>>脱出さん
ファイルを添付されていないのではないでしょうか?
あと、何が悪いのか・・・エラーはどういうのが出たのか
という情報も一緒に添えて頂くとありがたいと思われます。

脱出

Re:プログラムの分割について

#3

投稿記事 by 脱出 » 16年前

URL張るの忘れてましたすいません;;
http://www1.axfc.net/uploader/Ne/so/465 ... 1%E5%87%BA

1>hoka.cpp
: error C2065: 'Mouse_t' : 定義されていない識別子です。
: error C2065: 'Nezumi' : 定義されていない識別子です。
: fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
1>脱出ゲーム.cpp
: error C2065: 'Mouse_t' : 定義されていない識別子です。
: error C2065: 'Nezumi' : 定義されていない識別子です。
: fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。

何が悪いのかはからないです;;
エラーの気になるとこをいろいろやってみたりしたんですが全くできず;;
こんな感じで分かりますか?

kazuoni

Re:プログラムの分割について

#4

投稿記事 by kazuoni » 16年前

そのエラーのはMouse_t,Nezumiが定義されていないから出てきます。
この行をMouse_t,Nezumiが宣言された後に記述すれば回避できます。
コンパイルの際、上からコードを見ていくので。

これが通ってもすぐ次のエラーがずらーっと出てきますが、
それはまた試行錯誤してみてください。

脱出

Re:プログラムの分割について

#5

投稿記事 by 脱出 » 16年前

上の方に持って行きましたが今度は違うのが出てきました;;
未解決とはどうゆう事なんでしょうか?

1>hoka.obj : error LNK2001: 外部シンボル ""struct save_data_t save_data" (?save_data@@3Usave_data_t@@A)" は未解決です。
1>hoka.obj : error LNK2001: 外部シンボル ""int sentaku" (?sentaku@@3HA)" は未解決です。
1>hoka.obj : error LNK2001: 外部シンボル ""struct Mouse_t Mouse" (?Mouse@@3UMouse_t@@A)" は未解決です。
1>脱出ゲーム.obj : error LNK2019: 未解決の外部シンボル "struct Mouse_t Mouse" (?Mouse@@3UMouse_t@@A) が関数 _WinMain@16 で参照されました。
1>hoka.obj : error LNK2001: 外部シンボル ""int kuro" (?kuro@@3HA)" は未解決です。
↑この一行は画像と音楽などのが他にもいっぱい出てました。

BEMANI

Re:プログラムの分割について

#6

投稿記事 by BEMANI » 16年前

DxLibがないとコンパイルできないですね;
というわけで、自分のPCにDxLib導入してみました。

「KIHON.h」内で
extern int GetHitMouseStateAll_2(Mouse_t *Nezumi);

と宣言されていますが、この時点では kazuoniさんが仰る通り
Mouse_t が存在しませんので、Mouse_tの宣言を
extern int GetHitMouseStateAll_2(Mouse_t *Nezumi); の上に記述すれば問題は解決されます。

エラーまた出てきますけども;

脱出

Re:プログラムの分割について

#7

投稿記事 by 脱出 » 16年前

BEMANIさん
わざわざDxLibの導入して貰ってすいません。

extern int GetHitMouseStateAll_2(Mouse_t *Nezumi);
の上に持って行きましたが、
上に書いてあるエラーが出ます;;
何が原因なのか全く分からないです;;

kazuoni

Re:プログラムの分割について

#8

投稿記事 by kazuoni » 16年前

「C言語 分割ファイル」
とググれば参考コードはたくさん出てきますよ。
参考までに。
ttp://homepage3.nifty.com/mmgames/c_guide/20-02.html

SCI

Re:プログラムの分割について

#9

投稿記事 by SCI » 16年前

extern指定子は、外部で明示的に宣言された変数又は関数に対して使用できます。
すべてのファイルでextern宣言されてしまっていませんか?

脱出

Re:プログラムの分割について

#10

投稿記事 by 脱出 » 16年前

SCIさんの言っている事を理解できていれば、
あっているはずなんですができないです。

SCI

Re:プログラムの分割について

#11

投稿記事 by SCI » 16年前

ちょっとファイルがダウンロードできなかったので、予想に過ぎませんが・・・
プログラムは龍神録を参考に組んでいましたか?

脱出

Re:プログラムの分割について

#12

投稿記事 by 脱出 » 16年前

シューティングゲームの館
を見てやりました。
kazuoniさんのも見てみましました。
ダウンロードできませんでしたか。
一応パスは「脱出」です。すでに書いてあるとおもいますが。
できたプログラムを分割するより新しいのでやった方がいいですかね?

SooA

Re:プログラムの分割について

#13

投稿記事 by SooA » 16年前

失礼かと思いましたが、まとめるために
ファイル構成を少々変更させてもらいました。

問題点は以下の2点です。
・グローバル変数等を全て extern していた。
・a,b, から始まる変数群をメイン cpp 内とヘッダーで宣言していた。

SCI

Re:プログラムの分割について

#14

投稿記事 by SCI » 16年前

アップローダ若しくはブラウザに問題があったようです。
リンクを使用し、ファイルの受信に成功しました。

それで、ぱっと見た感じ、
>extern指定子は、外部で明示的に宣言された変数又は関数に対して使用できます。
>すべてのファイルでextern宣言されてしまっていませんか?
やはりこの通りでした。
KIHON.hには、extern宣言のみが記述されています。
しかし、変数の実体はどこにも宣言されていないようです。

「龍神録を参考にしているか」を聞いた真意は「GLOBALマクロを使っているか」ということなのでした。
龍神録ではグローバル変数(とそれを参照するモジュール)についてマクロを使って回避しています。

脱出

Re:プログラムの分割について

#15

投稿記事 by 脱出 » 16年前

グローバル変数という物が全然わからずすいません;;
グローバル変数について調べてみようと思います。
SooAさんのプログラムで出来ました。
皆さん
ありがとうございます。

SooA

Re:プログラムの分割について

#16

投稿記事 by SooA » 16年前

覚えてしまえば簡単ですよ^^

まず、
構造体は変数の宣言に使用するのだから変数より先に記述します、

変数は関数で使用するのだから関数より先に記述します、

そうすると自然に 構造体→変数→関数 という順番ができます。

グローバル変数については
確か2~4辺りを読むと以下の記述に関して書かれていると思います。

#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif

これは簡単に説明すると
GLOBAL_INSTANCE されていたら何もしない
(GLOBALという文字を無いものとして扱う)、
されていなかったら GLOBAL を extern に変更という意味で、

メインから呼び出す一度目だけグローバル宣言し
他のファイルから呼び出すときは extern するというものです。

この二つを覚えておけば後はサクサク進むと思うので
がんばってください。

脱出

Re:プログラムの分割について

#17

投稿記事 by 脱出 » 16年前

めちゃくちゃ分かりやすいです!
調べてたんですがなんかよく分からず。
なんて調べればよかったのかも分からずでしたw
SooAさんありがとうござます!

BEMANI

Re:プログラムの分割について

#18

投稿記事 by BEMANI » 16年前

バイト行ってる間に解決されていましたか;
しかも、自分の解答もあんま意味なかったみたいで;
もうしわけないですorz
制作頑張ってください~

脱出

Re:プログラムの分割について

#19

投稿記事 by 脱出 » 16年前

わざわざDxLibの導入までしてもらってるのに
こちらこそ申し訳ないです。
バイトがんばってくださいね!

閉鎖

“C言語何でも質問掲示板” へ戻る