TNP資料室 @ ウィキ

ファイルを分割する

最終更新:

Bot(ページ名リンク)

- view
だれでも歓迎! 編集

ファイルを分割する

 main.cppが大きくなってきました。ファイルを分割してみましょう。1つの山場です。
 ファイル分割にはヘッダーファイルを用います。ヘッダーファイルには、関数のプロトタイプ宣言と、グローバル変数の外部変数宣言(extern)を記述します。そもそもグローバル変数とは、そのソースファイル内のどこからでもアクセスできるというものであって、異なるソースファイル間ではアクセスすることが出来ないのです。そこで、他のソースファイルにあるグローバル変数にアクセスするために外部変数宣言が必要なのです。


ヘッダーファイルを追加する

 なにはともあれ、ソリューションエクスプローラーのヘッダーファイルにmain.hを追加してください。そして、そこにmain.cppの関数のプロトタイプ宣言を全て移動してください。そして、グローバル変数はヘッダーファイルにコピーしてください。そして、型名(intなど)の前にexternをつけて外部変数宣言をしてください。移動とコピーを間違えないでください。

 こうなるはずです。なお、順番は適当に入れ替えました。

main.h

extern int GameState;						// ゲームの状態を格納する変数
extern int Key[256];						// キーの押下時間を格納する配列
extern int white;						// 白の[[カラーコード]]を格納する

int GetKeyInput(int Key[]);					// キーの押下時間を調べる関数
void Title();							// タイトルの関数
void Game();							// ゲームの関数
void Clear();							// クリアの関数
void Retire();							// リタイアの関数

 ためしにこのままコンパイルしてみましょう。すると関数が見つからないといったエラーが出るはずです。それはこのヘッダーファイルをmain.cppに読み込ませていないためです。では読み込ませて見ましょう。main.cppの2行目にインクルード文を追加するだけでいいです。

#include "DxLib.h"
#include"main.h"

int Key[256];								// キーの押下時間を格納する配列
int white;								// 白のカラーコードを格納する
int GameState;								// ゲームの状態を格納する変数
...

 コンパイルしてみてください。今度はうまくいくはずです。

ソースファイルを追加する

 今度はソースファイルを追加してみましょう。今回は、title.cpp,game.cpp,clear.cpp,retire.cppを追加し、それぞれのソースファイルに該当する関数を移動します。ここではtitle.cppの内容のみ公開します。他のシートも同様に追加し、関数を移動してください。
#include"DxLib.h"
#include"main.h"
// タイトルの関数
// 戻り値 なし  引数 なし
void Title(){
	DrawString(100,100,"タイトル画面です",white);
	DrawString(100,120,"Zでゲームをはじめる",white);
	if( Key[KEY_INPUT_Z] == 1 )			// Zキーが押されたらゲームを始める
		GameState = 1;
}

 うまくコンパイルできましたか?プログラミングの上達にはとにかく作ることが必要です。苦労して覚えた文法というのはなかなか忘れません。

タグ:

+ タグ編集
  • タグ:
ウィキ募集バナー