ページ 1 / 1
第5章の消す部分がわからない
Posted: 2010年4月23日(金) 22:02
by アクア
第5章宣言の仕方について質問です。
GV.h変更などをした後、後は「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。
とありますが、上記がどの部分なのかがわかりません。
詳しい方いらっしゃいましたら、教えてください;;
Re:第5章の消す部分がわからない
Posted: 2010年4月23日(金) 23:06
by ookami
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」で宣言する必要がなくなるから消す、ということです。
Re:第5章の消す部分がわからない
Posted: 2010年4月24日(土) 10:56
by Dixq (管理人)
既に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を返す
この部分などですね。
Re:第5章の消す部分がわからない
Posted: 2010年4月24日(土) 16:29
by アクア
なるほどです、試してみますね~。
因みに模範解答などは無いのでしょうか。
たまにしかネットに繋げれないものでして・・・
Re:第5章の消す部分がわからない
Posted: 2010年4月24日(土) 16:31
by ROM
模範解答って何の?
見る限り問題のようなものはないようですが。
Re:第5章の消す部分がわからない
Posted: 2010年4月24日(土) 16:36
by box
考え方は、
1)実体を定義するのは、どこか1箇所だけ
2)他のファイルから当該の変数にアクセスする必要があれば、
「実体は別のファイルにあるよ」という意味でexternを付ける
Re:第5章の消す部分がわからない
Posted: 2010年4月24日(土) 19:22
by アクア
お蔭様で解決できました。みなさん有難うございます。
13章でまたしてもつまづいてますが、別スレにしておきます。