ページ 11

外部参照のエラーについて

Posted: 2012年2月22日(水) 06:09
by tetsu
filerという関数を作成し指定したディレクトリにあるファイルを読み込み、Character classに入れvectorでデータを管理しようとしています
しかしfiler関数がエラーをはきます
エラーメッセージとして

1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl filer(void)" (?filer@@YAXXZ) が関数 _WinMain@16 で参照されました。
1>C:\Users\tetsu\Documents\Visual Studio 2010\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と表示されます
filerの中身を削除し
filer(){}
としてもエラーが出ました
当方クラスとファイル列挙操作は初めて使用したので書き方が間違っているのかと思います
もしくはプロトタイプ宣言等がおかしいのでしょうか
エラーの解決策を教えて下さい、よろしくお願いします
環境はVC2010です

以下ソースコードです

コード:

//main.cpp
#include<DxLib.h>
#include<stdio.h>
#include<vector>
#include"class.h"
using namespace std;

int ProcessLoop();
void message_box();

void filer();

int ProcessLoop(){
	if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
	if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
	if((CheckHitKey( KEY_INPUT_ESCAPE )))return -1;//ESCが押されていたら-1
	return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
	message_box();
	//ChangeWindowMode(TRUE);
	if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
	int flame=0;

	filer();//ここにfiler
	ScreenFlip();
	while(ProcessLoop()==0){//メインループ

        }

	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;					// ソフトの終了
}

void message_box(){
	int flag;
	flag=MessageBox(
		NULL ,
		TEXT("フルスクリーンモードで起動しますか?") ,
		TEXT("スクリーン設定") , 
		MB_YESNO | MB_ICONQUESTION );
	if(flag==IDNO)
		ChangeWindowMode( TRUE );
}

//ファイル列挙してc_vectの中にデータを入れる
void flier(){

	HANDLE hSearch,hFile;
	WIN32_FIND_DATA fd;
	vector<class Character> c_vect;
	int count=0;


	// 全てのファイルを列挙する
	hSearch = FindFirstFile( "chara/?*.png", &fd );
	if( hSearch == INVALID_HANDLE_VALUE )
	{
		DrawString(0,0,"error",0xffffff);
		return ;
	}
	do
	{

		class Character* chara;
		chara = new class Character;
		// 列挙されたファイル名を書き出す
		(*chara).get_graph_data(fd.cFileName,count);
		c_vect.push_back(*chara);
		count++;

	}while(FindNextFile(hSearch, &fd));

	FindClose( hSearch );
	CloseHandle( hFile );
	return ;

}

コード:

//class.cpp
#include<DxLib.h>
#include<stdio.h>
#include"class.h"

//攻撃判定変更
void Character::chage_attack(int x[2],int y[2]){
	for(int i=0;i<2;i++){
		attack_x[i]=x[i];
		attack_y[i]=y[i];
	}
}
//食らい判定変更
void Character::chage_defense(int x[2],int y[2]){
	for(int i=0;i<2;i++){
		defense_x[i]=x[i];
		defense_y[i]=y[i];
	}
}
//データ格納用
void Character::get_graph_data(char *filename,int num){
	strcpy(name,filename);
	graph_num = num;
	graph_handle = LoadGraph(name);
}

コード:

//class.h
class Character{
private:
	char name[128];//グラフィック名
	int graph_num;//グラフィック番号
	int graph_handle;
	int attack_x[2];//攻撃判定
	int attack_y[2];
	int defense_x[2];//食らい判定
	int defense_y[2];

public:
	//Character();//コンストラクタ、後に追加
	void get_graph_data(char *filename,int num);
	void chage_attack(int x[2],int y[2]);
	void chage_defense(int x[2],int y[2]);
};

Re: 外部参照のエラーについて

Posted: 2012年2月22日(水) 07:09
by beatle

コード:

void filer();

コード:

void flier(){

Re: 外部参照のエラーについて

Posted: 2012年2月22日(水) 08:10
by tetsu
非常に初歩的なミスでした
しかしながら違いがわからずに何時間も格闘しておりました
本当にありがとうございます