こんにちは。
只今、「龍神録プログラミングの館」にて龍神録を作っているのですが、
第5章の「宣言の仕方を工夫しよう」の所でつまづいています。
function.h、GV.hを変更した所までは良いのですが、最後に
"「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。"
というのが どこを消せばいいのか分からず つまづいています。
extern宣言というのは最初にexternとついているやつで、
変数の宣言部は一番最初のやつですよね?(違ったでしょうか;)
それは分かるのですが、どこまで消せばいいのか分からず悩んでます。
どこを消せばいいのでしょうか?
具体的にお願いします!
5章でつまづいています
Re:5章でつまづいています
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] ) ; }とあると思います。
それを
#include "../include/GV.h" void load(){ LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ; }とすればいいんです。
Re:5章でつまづいています
御回答ありがとうございます!
しかし やってみたのですが、なぜだか上手くいきません…
変更した後のを貼りますので、違う所をご指摘ください。
まず 【main.cpp です。】
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
load();//データロード
while(ProcessLoop()==0){//メインループ
graph_main();//描画メイン
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
【次に load.cpp】
#include "../include/GV.h"
void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
【最後にgraph.cpp】
#include "../include/GV.h"
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
void graph_main(){
graph_ch();
}
よろしくお願い致します!
しかし やってみたのですが、なぜだか上手くいきません…
変更した後のを貼りますので、違う所をご指摘ください。
まず 【main.cpp です。】
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
load();//データロード
while(ProcessLoop()==0){//メインループ
graph_main();//描画メイン
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
【次に load.cpp】
#include "../include/GV.h"
void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}
【最後にgraph.cpp】
#include "../include/GV.h"
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}
void graph_main(){
graph_ch();
}
よろしくお願い致します!
Re:5章でつまづいています
どんなエラーメッセージでますか?
ソースは見たところ問題ないと思います。
あと以下のソースも確認してみてください。
「GV.h」
ソースは見たところ問題ないと思います。
あと以下のソースも確認してみてください。
「GV.h」
#include "../../../include/DxLib.h" #include "define.h" #ifdef GLOBAL_INSTANCE #define GLOBAL #else #define GLOBAL extern #endif #include "function.h" //画像用変数宣言部 GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用) //構造体変数宣言部 GLOBAL ch_t ch; //キャラクタデータ宣言「function.h」
//graph.cpp //描画メイン GLOBAL void graph_main(); //key.cpp //現在のキー入力処理を行う GLOBAL int GetHitKeyStateAll_2(); //受け取ったキー番号の現在の入力状態を返す GLOBAL int CheckStateKey(unsigned char Handle); //laod.cpp //データのロード GLOBAL void load();
Re:5章でつまづいています
GV.hもfunction.hはどちらも問題ありませんでした。
エラーメッセージは、ビルドした時に
「ビルド エラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
と なり、出力先の表示(?)という所に、
graph.obj : error LNK2005: "void __cdecl graph_ch(void)" (?graph_ch@@YAXXZ) は既に load.obj で定義されています。
1>graph.obj : error LNK2005: "void __cdecl graph_main(void)" (?graph_main@@YAXXZ) は既に load.obj で定義されています。
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl load(void)" (?load@@YAXXZ) が関数 _WinMain@16 で参照されました。
1>C:\Users\○○\Desktop\○○\project\project\4章\Debug\RyuJin.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と表示されます。
うーん…難しいです^^;
エラーメッセージは、ビルドした時に
「ビルド エラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
と なり、出力先の表示(?)という所に、
graph.obj : error LNK2005: "void __cdecl graph_ch(void)" (?graph_ch@@YAXXZ) は既に load.obj で定義されています。
1>graph.obj : error LNK2005: "void __cdecl graph_main(void)" (?graph_main@@YAXXZ) は既に load.obj で定義されています。
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl load(void)" (?load@@YAXXZ) が関数 _WinMain@16 で参照されました。
1>C:\Users\○○\Desktop\○○\project\project\4章\Debug\RyuJin.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と表示されます。
うーん…難しいです^^;
Re:5章でつまづいています
そのエラーメッセージはデバッグ時にビルドを行い、失敗したときに出ます。
そのビルドのときには、ヘッダファイルの変更が反映されないことがあるので、
一回デバッグ>デバッグ開始ではなく、
ビルド>ソリューションのリビルドを選んでみてください。
それでもだめなら、GV.hとfunction.hの中身を見せてください。
そのビルドのときには、ヘッダファイルの変更が反映されないことがあるので、
一回デバッグ>デバッグ開始ではなく、
ビルド>ソリューションのリビルドを選んでみてください。
それでもだめなら、GV.hとfunction.hの中身を見せてください。
Re:5章でつまづいています
やってみたのですがダメでした…;
GV.hとfunction.hの中身ですね。
【GV.h】
#include "../../../include/DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
//画像用変数宣言部
GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
//構造体変数宣言部
GLOBAL ch_t ch; //キャラクタデータ宣言
【function.h】
//graph.cpp
//描画メイン
GLOBAL void graph_main();
//key.cpp
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//laod.cpp
//データのロード
GLOBAL void load();
ちゃんと出来ていると思ってはいるのですが....
ご指摘よろしくお願いします。
GV.hとfunction.hの中身ですね。
【GV.h】
#include "../../../include/DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include "function.h"
//画像用変数宣言部
GLOBAL int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
//構造体変数宣言部
GLOBAL ch_t ch; //キャラクタデータ宣言
【function.h】
//graph.cpp
//描画メイン
GLOBAL void graph_main();
//key.cpp
//現在のキー入力処理を行う
GLOBAL int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
GLOBAL int CheckStateKey(unsigned char Handle);
//laod.cpp
//データのロード
GLOBAL void load();
ちゃんと出来ていると思ってはいるのですが....
ご指摘よろしくお願いします。
Re:5章でつまづいています
>>Justyさん
すみません。勘違いしました。
load.cppとgraph.cppが入れ替わっているのではなく、
load.cppの中身がgraph.cppとまったく同じものだということですね。
そのようにしたら確かに小夜さんと同じ状態になりました。
すみません。勘違いしました。
load.cppとgraph.cppが入れ替わっているのではなく、
load.cppの中身がgraph.cppとまったく同じものだということですね。
そのようにしたら確かに小夜さんと同じ状態になりました。
Re:5章でつまづいています
>load.cppの中身がgraph.cppとまったく同じものだということですね
エラーメッセージからそのまま読み取ったのが上記のものだったのですが、
端的に纏めるとまさにそういうことになりますね。
Re:5章でつまづいています
皆様ありがとうございました!!!
よく確認すると、load.cppの中がgraph.cppと同じになっていました;
変更してビルドすると4章と同じようになりました。
皆様本当にありがとうございました!
また助けてくださいますよう、よろしくお願い致します^^;
よく確認すると、load.cppの中がgraph.cppと同じになっていました;
変更してビルドすると4章と同じようになりました。
皆様本当にありがとうございました!
また助けてくださいますよう、よろしくお願い致します^^;