第5章宣言の仕方について質問です。
GV.h変更などをした後、後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。
とありますが、上記がどの部分なのかがわかりません。
詳しい方いらっしゃいましたら、教えてください;;
第5章の消す部分がわからない
Re:第5章の消す部分がわからない
http://dixq.net/rp/5.html
ここですよね。
例えば、以下のような場合、iの実体が複数あるのでリンクエラーになります。
--main.cpp
int i;
:
--sub.cpp
int i; // すでにiの実体があるのでリンクエラー
:
次のような場合は、iの実体は1個なので、エラーになりません。
--main.cpp
int i;
:
--sub.cpp
extern int i; // 問題ない。main.cppのiと共有。
:
で、次のような場合は、iの実体がひとつもないので、エラーになります。
--main.cpp
extern int i;
:
--sub.cpp
extern int i;
:
この辺の、externを付けたり付けなかったりするのが面倒なので GV.h にまとめているのが問題のページのようですね。GV.h に「GLOBAL xxxx」として追加した変数は、「main.cpp」「graph.cpp」「load.cpp」で宣言する必要がなくなるから消す、ということです。
ここですよね。
例えば、以下のような場合、iの実体が複数あるのでリンクエラーになります。
--main.cpp
int i;
:
--sub.cpp
int i; // すでにiの実体があるのでリンクエラー
:
次のような場合は、iの実体は1個なので、エラーになりません。
--main.cpp
int i;
:
--sub.cpp
extern int i; // 問題ない。main.cppのiと共有。
:
で、次のような場合は、iの実体がひとつもないので、エラーになります。
--main.cpp
extern int i;
:
--sub.cpp
extern int i;
:
この辺の、externを付けたり付けなかったりするのが面倒なので GV.h にまとめているのが問題のページのようですね。GV.h に「GLOBAL xxxx」として追加した変数は、「main.cpp」「graph.cpp」「load.cpp」で宣言する必要がなくなるから消す、ということです。
Re:第5章の消す部分がわからない
既にookamiさんがお答えくださっていますが、
「main.cpp」「graph.cpp」「load.cpp」のファイルの冒頭にある変数の宣言とexternから始まる行を消すということです。
例えば
--load.cpp変更--
#include "../include/GV.h"
extern int img_ch[2][12];
void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
この部分や
--main.cpp変更--
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
//データのロード
extern void load();
//描画メイン
extern void graph_main();
int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ宣言
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
この部分などですね。
「main.cpp」「graph.cpp」「load.cpp」のファイルの冒頭にある変数の宣言とexternから始まる行を消すということです。
例えば
--load.cpp変更--
#include "../include/GV.h"
extern int img_ch[2][12];
void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
この部分や
--main.cpp変更--
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
//データのロード
extern void load();
//描画メイン
extern void graph_main();
int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ宣言
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
この部分などですね。
Re:第5章の消す部分がわからない
考え方は、
1)実体を定義するのは、どこか1箇所だけ
2)他のファイルから当該の変数にアクセスする必要があれば、
「実体は別のファイルにあるよ」という意味でexternを付ける
1)実体を定義するのは、どこか1箇所だけ
2)他のファイルから当該の変数にアクセスする必要があれば、
「実体は別のファイルにあるよ」という意味でexternを付ける