未解決外部シンボルとは何ですか?

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

未解決外部シンボルとは何ですか?

#1

投稿記事 by kino » 12年前

コマンドプロンプトで動くじゃんけんプログラムを作成しています。

EXEを作るのにVCExpress2010版を使っているのですが
次のようなエラーが起こってしまい解決できずにいます。

"error LNK2019: 未解決の外部シンボル "int __cdecl GETWINNER(int,int)" (?GETWINNER@@$$FYAHHH@Z) が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました"


GETWINNER()関数がらみの問題であるみたいなのですが、未解決の外部シンボルがらみのエラーは具体的にはどのような問題が起こっているのでしょうか?
プログラムは以下の通りです

コード:

 

#include<stdio.h>
#include<stdLib.h>
#include<time.h>

/*じゃんけんの手を出す定数*/
#define GU    0
#define CHOKI 1 
#define PA    2

/*勝者をあらわす定数*/
#define USER     0
#define COMPUTER 1 
#define DRAW     2

/*関数のプロトタイプ*/
int GETUSERHAND();
int GETCOMPUTERHAND();
int GETWINNER(int u,int c);
void SHOWWINNER(int w);

/*プログラムのメイン*/
int main(){
	int u,c,winner;

	/**/
	u = GETUSERHAND();

	/**/
	c = GETCOMPUTERHAND();

	/**/
	winner = GETWINNER(u,c);

	/**/
	SHOWWINNER(winner);

	return 0;
	}

/**/
int GETUSERHAND()
{
	int ans;
	printf("ユーザーの手を選んでください\n");
	printf("0:グー 1:チョキ 2:パー\n");
	put(ans);

	return ans;
}

int GETCOMPUTERHAND()
{
	int ans;

	srand(time(NULL))
	ans =rand() % 3;
	printf("コンピューターの手 = %d\n",ans);

	return ans;

}
/*勝利を判定する関数*/
int GETWINNWR(int u,int c)
{

	int ans;

	if(u == c)
	{
	ans = DRAW;
	}
	else if((u == GU)&&(c==CHOKI))
	{
	ans = USER;
	}
	else if((u == CHOKI)&&(c == PA))
	{
	ans = USER;
	}
	else if((u == PA)&&(c == GU))
	{
	ans = USER;
	}
	else
	{
	ans = COMPUTER
	}

	return ans;
}

void SHOWWINNER(int w)
{
	if(w==USER)
	{
	printf("あなたの勝ち\n");
	}
	if(w==COMPUTER)
	{
	printf("pcの勝ちです\n");
	}
	else
	{
	printf("引き分けです\n");
	}

	return;
}








アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 未解決外部シンボルとは何ですか?

#2

投稿記事 by みけCAT » 12年前

GETWINNER関数の定義が見つからないようです。
必要なファイルをリンクしているか、スペルミスがないかを確認してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 未解決外部シンボルとは何ですか?

#3

投稿記事 by みけCAT » 12年前

kino さんが書きました:

コード:

int GETWINNWR(int u,int c)
はい、スペルミスですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kino

Re: 未解決外部シンボルとは何ですか?

#4

投稿記事 by kino » 12年前

コメントありがとうございます

ご指摘の通りGETWINNER()関数のつづりが間違っていたので、正しく記述したところ問題が解決しました
これが未解決シンボルの正体だったようです。ほかにもUSERが勝利した時、勝ちのコメントと引き分けのコメントが
同時表示されていたので修正しました。

ご協力感謝します

コード:

 
#include<stdio.h>
#include<stdLib.h>
#include<time.h>

#define scanf scanf_s

/*じゃんけんの手を出す定数*/
#define GU    0
#define CHOKI 1 
#define PA    2

/*勝者をあらわす定数*/
#define USER     3
#define COMPUTER 4
#define DRAW     5

/*関数のプロトタイプ*/
int GETUSERHAND();
int GETCOMPUTERHAND();
int GETWINNER(int u,int c);
void SHOWWINNER(int w);

/*プログラムのメイン*/
int main(){
	int u,c,winner;

	/**/
	u = GETUSERHAND();

	/**/
	c = GETCOMPUTERHAND();

	/**/
	winner = GETWINNER(u,c);

	/**/
	SHOWWINNER(winner);

	return 0;
}

/**/
int GETUSERHAND()
{
	int ans;
	printf("ユーザーの手を選んでください\n");
	printf("0:グー 1:チョキ 2:パー\n");
	scanf("%d",&ans);

	return ans;
}

int GETCOMPUTERHAND()
{
	int ans;

	srand((unsigned) time(NULL));
	ans =rand() % 3;
	printf("コンピューターの手 = %d\n",ans);

	return ans;

}
/*勝利を判定する関数*/
int GETWINNER(int u,int c)
{

	int ans;

	if(u == c)
	{
	ans = DRAW;
	}
	else if((u == GU)&&(c == CHOKI))
	{
	ans = USER;
	}
	else if((u == CHOKI)&&(c == PA))
	{
	ans = USER;
	}
	else if((u == PA)&&(c == GU))
	{
	ans = USER;
	}
	else
	{
	ans = COMPUTER;
	}

	return ans;
}

void SHOWWINNER(int w)
{
	if(w==USER)
	{
	printf("あなたの勝ちです\n");
	}
	if(w==COMPUTER)
	{
	printf("pcの勝ちです\n");
	}else if(w==DRAW){
	printf("引き分けです\n");
	}

	return;
}









閉鎖

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