ページ 11

LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 15:17
by メカ
あるサイトを参考(ほぼ丸写し?w)にしながらゲームを作ろうとしているのですがファイルを分割しようとしたところでエラーが出て困っています。
多分、main.cppが悪いと思うのですがmain.cppのどこが悪いのかがわかりません。
誰か分かる人がいたら教えて下さいお願いします!

あるサイトのリンク
http://www29.atwiki.jp/kokeiro/pages/16.html

エラーメッセージ
1>main.obj : error LNK2019: 未解決の外部シンボル "int blue" (?blue@@3HA) が関数 _WinMain@16 で参照されました。
1>Title.obj : error LNK2001: 外部シンボル ""int blue" (?blue@@3HA)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""int * Key" (?Key@@3PAHA)" は未解決です。
1>Title.obj : error LNK2001: 外部シンボル ""int * Key" (?Key@@3PAHA)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""int GameState" (?GameState@@3HA)" は未解決です。
1>Title.obj : error LNK2001: 外部シンボル ""int GameState" (?GameState@@3HA)" は未解決です。
1>E:\Visual Studio 2008\Projects\麻雀\Debug\麻雀.exe : fatal error LNK1120: 外部参照 3 が未解決です。

作っているプログラム
main.h

コード:

extern int GameState;//ゲームの状態を格納する変数
extern int Key[256];//キーの押下時間を格納する配列
extern int blue;//カラーコードを格納する

int GetKeyInput(int Key[]);//キーの押下時間を調べる関数
//画面切り替え関数
void Title();
void game();
main.cpp

コード:

#include "DxLib.h"
#include "main.h"

int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	ChangeWindowMode( TRUE ) ;
	if( DxLib_Init() == -1 )
		return -1; 
	SetDrawScreen( DX_SCREEN_BACK ) ;//裏画面

	blue = GetColor(0,0,255);//カラー変更

	GameState = 0;//最初に表示する画面

	while( ProcessMessage()==0 && GetKeyInput(Key)==0 && Key[KEY_INPUT_ESCAPE]==0 && ClearDrawScreen()==0){//ESCで終了

		switch(GameState){

			case 0:
				Title();
				break;

			case 1:
				game();
				break;
		}

		ScreenFlip();
	}
	InitGraph();
	InitSoundMem();
	DxLib_End();//DXライブラリ終了
	return 0 ;
}


//キー関連処理
int GetKeyInput(int Key[] ){
	char damy[256];
	GetHitKeyStateAll(damy);
	for(int i=0 ; i<256 ; i++){
	 	if( damy[i] == 1 )
			Key[i]++;
		else
			Key[i]=0;
	}
	return 0;
}

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 15:25
by softya(ソフト屋)
忠告としては1から順番に理解しながら作業しないとダメです。どっか読み飛ばしています。
それと、C言語の文法についても並行で勉強する必要もあります。

ただ機械的に写しても勉強にはならないので、打ち込む一行一行を理解しながら行なって下さい。

[補足]
厳しいことを書きましたが何のためにプログラムで作るかってことを考えて頂ければと思います。
ただ動けば良いのならvector辺りのサイトから遊べるものをダウンロードしてくるのが早いわけですし。

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 16:11
by メカ
スレ主です。
すいません、書き忘れいていたのですがC言語の基本は理解してるつもりですw
このプログラムもちゃんと一行一行理解+確認しながらやっているのですがエラーが出るのでスレ立てました。

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 16:27
by h2so5
メカ さんが書きました:スレ主です。
すいません、書き忘れいていたのですがC言語の基本は理解してるつもりですw
このプログラムもちゃんと一行一行理解+確認しながらやっているのですがエラーが出るのでスレ立てました。
では、 このコードの extern修飾子の意味を説明してください。

コード:

extern int GameState;//ゲームの状態を格納する変数
extern int Key[256];//キーの押下時間を格納する配列
extern int blue;//カラーコードを格納する

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 16:28
by softya(ソフト屋)
このエラーはC言語の記憶クラス指定子のexternの不理解によるものです。
申し訳ないですが読まれているC言語の入門書を再確認される事をおすすめします。

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 16:40
by メカ
スレ主です。

そうですか
やっぱり基礎だけじゃゲームは作れないのかもしれないですね
最初から勉強しなおしてきます。
コメントしてくれた皆さんありがとうございました。

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 16:51
by softya(ソフト屋)
メカ さんが書きました:スレ主です。

そうですか
やっぱり基礎だけじゃゲームは作れないのかもしれないですね
最初から勉強しなおしてきます。
コメントしてくれた皆さんありがとうございました。
少なくともexternはファイル分割のためには必要な基礎だと思います。
ただ、調べてみたところ説明がない入門書もあるみたいなのでメカさんが知らなくても仕方がない部分はあります。
まぁ、externをソースコードで見かけた時に何の疑問も持たなかったのは一行一行理解しているとは言えないと思いますけど。

●参考
「分割の定石」
http://homepage3.nifty.com/mmgames/c_guide/20-02.html
「分割コンパイル」
http://utsukemononi.gozaru.jp/gc/page21.html
「C言語メモ4 extern指定子 - はてなだいありい」
http://d.hatena.ne.jp/staryoshi/20090916/1253095751

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 17:08
by メカ
>ソフト屋さん
そのリンクを参考に勉強したいと思います。

学校で基礎からゲーム作りまで勉強してわかったつもりだったのですがほぼ忘れてしまったようです(´・ω・`)
externもヘッダーファイルをインクルードすればそのソースファイル内でも使えるぐらいしか分かってませんでしたしw

Re: LNK2019・LNK2001エラー

Posted: 2012年5月30日(水) 19:30
by メカ
ソフト屋さんの教えてくれたサイトで勉強しましたら見事に解決することができました!
ありがとうございました(__)