リンカエラー2020、2001 未解決のトークン~について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
おすし
記事: 9
登録日時: 3ヶ月前

リンカエラー2020、2001 未解決のトークン~について

#1

投稿記事 by おすし » 2ヶ月前

タイピングゲームを作っているのですがデバッグすると下のようなエラーが出て実行できません。

エラー LNK2020 未解決のトークン (0A00047A) "char * nyuuryoku" (?nyuuryoku@@3PADA)
エラー LNK2001 外部シンボル ""char * nyuuryoku" (?nyuuryoku@@3PADA)" は未解決です。

長ったらしいソースで申し訳ありません。どこを直したら良いのかお教え下さい。宜しくお願いします‼

コード:

#include <iostream>
#include <string>
#include <ctime>
#include <stdio.h>
#include <time.h>

using namespace std;

bool flag;                                                  //ミスしたかのフラグ
int miss = 0;                                               //ミスの回数を数える
char nyuuryoku[];                                           //ユーザーの回答を入れる
int a, i;
int ransuu; 
double limit;

void SEISEI(int ransuu)                                      //乱数の生成
{
	srand(time(NULL));

	ransuu = rand() % 10 + 1;
}
struct Answer                                              //ふりがなとローマ字を持つ構造体を作成
{
	string hurigana;
	string romazi;
};
void HANTEI(string romazi)                                    //答えの文字列と比較する
{
	for (a = 0; romazi[a] != '\0'; ++a);                      //文字列の長さを計る
	int length = a;               

	
		for (i = 0; i < length && flag == true; i++)
		{
			scanf("%d", &nyuuryoku[i]);                       //ユーザーが文字を入力
			if (romazi[i] != nyuuryoku[i]) flag = false;      //ミスしたらフラグを立てる
		}
		if (flag == false)                                    //ミスした時の処理
		{
			while (flag == false)
			{
				scanf("%d", &nyuuryoku[i]);
				if (romazi[i] != nyuuryoku[i])                //正解したらループを抜ける
				{
					flag = true;
					break;
				}
				miss++;
			}
		}
}
Answer answer;

void SWITCH ()                                                                                              //型がvoidで正しいのか調べる
{
	switch (ransuu)
	{
	case 1: answer.hurigana = "きゅうり";
		answer.romazi = "kyuuri";
	};                                                                                                      //途中
}
void LAYOUT()
{

}
int main()
{
	LAYOUT();
	flag = true;
	clock_t start;                                       //時間を測定する
	start = clock();
	limit = start / CLOCKS_PER_SEC;                       //時間を秒に変換
	while (limit <= 60)
	{
		SEISEI(ransuu);
		SWITCH();
		HANTEI(answer.romazi);
	}
}

アバター
あたっしゅ
記事: 242
登録日時: 8年前
住所: 東京23区
連絡を取る:

Re: リンカエラー2020、2001 未解決のトークン~について

#2

投稿記事 by あたっしゅ » 2ヶ月前

文法的には、11 行目の

>char nyuuryoku[]; //ユーザーの回答を入れる



char nyuuryoku[ 128 ];

とかにすれば、コンパイルは通る。

ただし、ざっと見たところ、char[] と string が混在しているので、
本来のおすしサンの意図通りに動くかどうかは別。
手提鞄あたっしゅ、[MrAtassyu] http://atassyu.rosx.net/
2019(R01)-08-11(日・祝) コミックマーケット C96 日 西さ34a 手提鞄屋魚有店(てさげかばんやうおありてん)

かずま

Re: リンカエラー2020、2001 未解決のトークン~について

#3

投稿記事 by かずま » 2ヶ月前

次のプログラムは参考になりますか?

コード:

#include <iostream>  // cin, cout
#include <string>    // string
#include <ctime>     // time
#include <cstdlib>   // rand, srand

using namespace std;

struct Answer {
	string hurigana;
	string romazi;
};

Answer answer[] = {
	{ "きゅうり",   "kyuuri" },
	{ "レタス",     "retasu" },
	{ "トマト",     "tomato" },
	{ "にんじん",   "ninjin" },
	{ "じゃがいも", "jagaimo" },
};

const int N = sizeof(answer) / sizeof(answer[0]);
const int LIMIT = 15;

int main()
{
	int index[N], n = N, miss = 0, t;
	time_t t0 = time(0);
	srand(t0);
	for (int i = 0; i < N; i++) index[i] = i;
	while (n > 0 && (t = time(0) - t0) < LIMIT) {
		int k = rand() % n, i = index[k];
		index[k] = index[--n];
		cout << answer[i].hurigana << endl;
		while ((t = time(0) - t0) < LIMIT) {
			string nyuuryoku;
			cin >> nyuuryoku;
			if (nyuuryoku == answer[i].romazi) break;
			miss++;
			cout << "  wrong! again: " << answer[i].hurigana << endl;
		}
	}
	cout << t << " sec passed\n" << "you made " << miss << " mistakes\n";
}

おすし
記事: 9
登録日時: 3ヶ月前

Re: リンカエラー2020、2001 未解決のトークン~について

#4

投稿記事 by おすし » 2ヶ月前

迅速な対応ありがとうございます。コードが未完成なのでどう動くかはまだわからないですが、とりあえず実行することはできたので上のプログラムを見つつ試行錯誤していこうと思います。

返信

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