XPでVC++2008を使っているのですが、どうしても分からないエラー(コンパイル時)が起きました。
ーーーーーmein.cを全て公開しました。ーーーーー
ソース"main.c"
/*数を当てるゲーム*/
/*文字を入れた場合の問題あり*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "game.h"
#include "timer.h"
//変数
int num[s_size],
rep, cnt = 0,
yosou, answer = -1,worng,
i, hugou, sa;
int* p;
int main() {
FILE *fp; //ファイルポインタ*
puts("ゲーム...\nランキング...");
for (i = 0; i <= s_size; i++) //念のためnum全てに0を代入
num = 0;
puts(" [数あてゲーム]");
printf("スタートランクを指定してください(スタートは1~5(最大%d)) >",rank_max);
scanf_s("%1d",&g_va.rank);
if(!(g_va.rank>0 && g_va.rank<=5)) { //もしエラーなら
error();
g_va.rank = 1;
main();
}
g_va.tp = g_va.rank * 3;
puts("・・・・・・・・・・・・・・・・・・・・・・・・・");
do {
yosou = -1;
cnt = 0,worng = 0;
p='\0';
printf("STAGE%d[現在 ランク%d]\nゲームのレベルを選択してください。(1~100) ",g_va.tp,g_va.rank);
scanf_s("%d",&g_va.level);
if(!(g_va.level>0 && g_va.level<=100)) {
printf("\n\tErorr\n\n");
continue;
}
sistem(&g_va);
printf("\t---1から%dまでの乱数を予想せよ!(回数制限=%d)---\n",g_va.kazu,g_va.over);
//注:現段階では、文字を入力しないでください!
while(yosou != answer) { //メイン
if(cnt>=g_va.over){ //もし回数制限を越えていたら終了
puts("GAMEOVER!!");
}
kaitou();
}
sleep(1000);
printf("おめでとうございます。「%d回」で正解しました!\n\n",cnt);
printf("----------入力履歴----------\n"); //入力履歴表示&プラスマイナスいくつか
printf(" 1回目 : %3d\n",num[0]);
for(i = 1; i < cnt; i++) { //前後の数値の差の絶対値 及び '+'or'ー'を求めるため
if(cnt>=s_size)
continue;
p = #
if (*p < *(p-1)) { //前の数より*Pの方が小さい
hugou = '-'; //-
sa = *(p-1) - *p;
} else if(*p > *(p-1)){ //前の数より*Pの方が大きい
hugou = '+'; //+
sa = *p - *(p-1);
} else { //前の数と*Pが等しい
printf("%2d回目 : %3d (±0)\n",i+1,*p);
continue;
}
printf("%2d回目 : %3d (%c %d)\n",i+1,*p,hugou,sa);
}
if (cnt<=5 && cnt>1)
printf("5回以内で正解!お見事!\n");
if(cnt==1)
printf("….\n\n");
g_va.score += g_va.level * g_va.rank; //スコア表示と計算
g_va.rank = g_va.tp++ / 3; //ランク変更(後置インクリメント)
if(g_va.rank>rank_max)
g_va.rank = rank_max;
sleep(3000);
printf("現在のスコアは%dです\nもう一度やりますか?Yes..1 No..0 >",g_va.score);
scanf_s("%d",&rep);
for(i = 1; i <= 10; i++)
printf("\n");
puts ("----------------------------\n\n");
} while (rep == 1);
}
//問題に解答する
void kaitou(void) {
putchar ('>');
scanf_s("%d",&yosou);
if (cnt<s_size)
num[cnt] = yosou; //num[0~cut]に入力値を代入(s_size回まで)
if (!(1<=yosou && yosou<=g_va.kazu)) {
printf("\t\a\aError 1から%dまでの数ではありません\n",g_va.kazu);
cnt--; //num[/url]への場所を戻す
worng++;
if (worng>=5)
printf("エラーを確認しましたか?\n");
}else if (answer == yosou+1 || answer == yosou-1) {
printf("惜しい!(%d回目)\n",cnt+1);
}else if (yosou < answer){
printf("\aもっと大きい数です(%d回目)\n",cnt+1);
}else if (yosou > answer){
printf("\aもっと小さい数です(%d回目)\n",cnt+1);
}
cnt++;
}
//数を決定する
void sistem(struct variable *g_va) {
//回数制限...150-レベル+?÷ランク
g_va->over = (150 - g_va->level + (num[0] % 10 /2)) / g_va->rank ;
if (g_va->over<2)
g_va->over = 2;
else if (g_va->over>100)
g_va->over = 100;
//数の上限...レベル×10+? の100~190%
g_va->kazu = (g_va->level * 10 + (num[0] % 10)) * (1.0 + (g_va->rank - 1.0) / 10.0);
//(乱数の発生)
srand((unsigned)time(NULL));
answer = (rand() % g_va->kazu) + 1;
}また、これがtimer.hは、xミリ秒待つ関数です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
リンクしています...
ERROR.obj : error LNK2005: _g_va は既に main.obj で定義されています。
D:\data\My Data\Visual Studio 2008\Projects\game\Debug\game.exe : fatal error LNK1169:
1 つ以上の複数回定義されているシンボルが見つかりました。
game - エラー 2、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上のように、「1 つ以上の複数回定義されているシンボルが見つかりました。」と出力ウィンドウにありますが、この意味が分かりません。ちなみに、"g_va"はヘッダファイルで構造体としてのみ宣言しています。