ページ 11

printfDXについて

Posted: 2010年3月21日(日) 14:11
by FOX
現在、「C言語ゲームプログラミング教室」という参考書で、C言語を勉強させてもらってます。
そこで、デバッグライト(プログラムを動作させながら、変数の中身などを確認)という手法が掲載されており
printf関数はコンソールアプリケーションでしか使用できないので、DXライブラリでは代わりに
printfDX関数を使用する。とあり、
printfDX関数の使用方法は、printf関数と同じです。と書いてありました。
ですが、printfDX関数を、printf関数と同じようにつかってみると、
定義の仕方が違います。のようなエラーがでます。
どのように使えばいいのでしょうか?
ややこしい文章ですみませんが、よろしくお願いします。 画像

Re:printfDXについて

Posted: 2010年3月21日(日) 14:36
by softya
どの様に書いたか、貼りつけてもらえますか。正確なエラーメッセージもお願いします。

Re:printfDXについて

Posted: 2010年3月21日(日) 19:05
by FOX
ちょっと書き方をかえたら、エラーの内容が変わりました。プログラムのソースが長いので、全部は載せれませんが、
その周辺だけ載せます。
エラーの内容は
1>mymain.obj : error LNK2005: "int g_akey_previous" (?g_akey_previous@@3HA) は既に myhelper.obj で定義されています。
1>C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\chap4\Release\chap4.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
です。
このプロジェクトはmymain.h,mymain.cpp,myhelper.h,myhelper.cppの4つからなっています。
g_akey_previousは
mymain.h内で、
BOOL g_akey_previous = FALSE;//Aキーの状態

そして、myhelper.cppで
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0){
ClsDrawScreen(); //画面を消去
MyMain();
printfDx("Aのボタン%d",g_akey_previous);
ScreenFlip(); //画面を切り替え
//1ループにかかった時間を計測
int curtime = GetNowCount() & INT_MAX;
g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
g_lasttime = curtime;
if (g_frametime > 0.03f) g_frametime = 0.03f;
}
と使用されています。
尚、myhelper.hにはg_akey_previousに関することは何も書かれていません。

以上です。
もし、リンクの問題ならば、解決法を詳しくお願いします。
初心者なので、○○を□□すればよいといわれても、
○○する方法がわかんなかったりします;;
よろしくおねがいします。

画像

Re:printfDXについて

Posted: 2010年3月21日(日) 19:32
by softya
ヘッダの書き方が間違っていますね。
BOOL g_akey_previous = FALSE;//Aキーの状態
これだと実体の定義ですので、ヘッダでやっては行けませんよ。
実体はmymain.cppで書いてください。
ヘッダでは、
extern BOOL g_akey_previous;
と書きます。

参考にしてください。分割コンパイル
http://www.geocities.jp/ky_webid/c/032.html

Re:printfDXについて

Posted: 2010年3月22日(月) 00:03
by FOX
ありがとうございます!!
HPを参考にして、おっしゃられたとおりに書き直したらできました。
いつもありがとうございます^^
またおねがいします!