5章でつまづいています

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

5章でつまづいています

#1

投稿記事 by 小夜 » 16年前

こんにちは。
只今、「龍神録プログラミングの館」にて龍神録を作っているのですが、
第5章の「宣言の仕方を工夫しよう」の所でつまづいています。

function.h、GV.hを変更した所までは良いのですが、最後に
"「main.cpp」「graph.cpp」「load.cpp」にある変数の宣言部と、extern宣言を全て消してください。"
というのが どこを消せばいいのか分からず つまづいています。
extern宣言というのは最初にexternとついているやつで、
変数の宣言部は一番最初のやつですよね?(違ったでしょうか;)
それは分かるのですが、どこまで消せばいいのか分からず悩んでます。
どこを消せばいいのでしょうか?
具体的にお願いします!

でんすけ

Re:5章でつまづいています

#2

投稿記事 by でんすけ » 16年前

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章でつまづいています

#3

投稿記事 by 小夜 » 16年前

御回答ありがとうございます!
しかし やってみたのですが、なぜだか上手くいきません…
変更した後のを貼りますので、違う所をご指摘ください。

まず 【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章でつまづいています

#4

投稿記事 by でんすけ » 16年前

どんなエラーメッセージでますか?
ソースは見たところ問題ないと思います。

あと以下のソースも確認してみてください。

「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章でつまづいています

#5

投稿記事 by 小夜 » 16年前

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 が未解決です。

と表示されます。
うーん…難しいです^^;

Tatu

Re:5章でつまづいています

#6

投稿記事 by Tatu » 16年前

そのエラーメッセージはデバッグ時にビルドを行い、失敗したときに出ます。

そのビルドのときには、ヘッダファイルの変更が反映されないことがあるので、

一回デバッグ>デバッグ開始ではなく、

ビルド>ソリューションのリビルドを選んでみてください。

それでもだめなら、GV.hとfunction.hの中身を見せてください。

小夜

Re:5章でつまづいています

#7

投稿記事 by 小夜 » 16年前

やってみたのですがダメでした…;
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();


ちゃんと出来ていると思ってはいるのですが....
ご指摘よろしくお願いします。

Justy

Re:5章でつまづいています

#8

投稿記事 by Justy » 16年前

 load.cppの中に load関数がなく、代わりに graph_ch関数や graph_main関数が
定義されていませんか?

Tatu

Re:5章でつまづいています

#9

投稿記事 by Tatu » 16年前

>>Justy さん
今、5章のプロジェクトでload.cppとgraph.cppの名前を入れ替えて試しましたが

正常に動きました。

Tatu

Re:5章でつまづいています

#10

投稿記事 by Tatu » 16年前

>>Justyさん
すみません。勘違いしました。
load.cppとgraph.cppが入れ替わっているのではなく、
load.cppの中身がgraph.cppとまったく同じものだということですね。

そのようにしたら確かに小夜さんと同じ状態になりました。

Justy

Re:5章でつまづいています

#11

投稿記事 by Justy » 16年前


>load.cppの中身がgraph.cppとまったく同じものだということですね

 エラーメッセージからそのまま読み取ったのが上記のものだったのですが、
端的に纏めるとまさにそういうことになりますね。

小夜

Re:5章でつまづいています

#12

投稿記事 by 小夜 » 16年前

皆様ありがとうございました!!!
よく確認すると、load.cppの中がgraph.cppと同じになっていました;
変更してビルドすると4章と同じようになりました。
皆様本当にありがとうございました!
また助けてくださいますよう、よろしくお願い致します^^;

閉鎖

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