ページ 1 / 1
エラーの原因がわからない
Posted: 2020年8月24日(月) 17:57
by blue
コード:
int GameMsg001(void)
{
char ch;
printf("do you fight the dragon? [y/n]");
scanf("%c", &ch);
switch (ch) {
case 'y':
puts("you dead!");
break;
case 'n':
puts("you couldn't escape");
break;
default: puts("you should keep the rule!");
}
puts("GAME OVER");
getchar();
return 0;
}
[\code]
何回やってもエラーが出てしまいます。
どこをなおせばいいでしょうか?
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 18:28
by Butter
とりあえず、どんなエラーか具体的に
教えて下さい。
コンパイルエラーか、実行時エラーか
(実行時に固まるとか)、コンパイルエラーなら、
その種類も。
エラーの種類とかが書かれてないと、
答えられるものも答えられないと思います。
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 18:36
by blue
エラー LNK1120 1 件の未解決の外部参照
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2019 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。
このようなエラーが出ました
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 18:44
by Butter
関数そのものに問題があるわけでばない気がします。
出来ればコードを全て乗せて頂けますか?
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 19:05
by blue
#define _CRT_SECURE_NO_WARNINGS
コード:
#include <stdio.h>
#include <stdlib.h>
void GameMsg_prologue(void);
int GameMsg_ending(void);
int GameMsg001(void);
int GameMsg002(void);
int GameMsg003(void);
void InputYesNo(void);
int GameMsg001(void)
{
char ch;
printf("do you fight the dragon? [y/n]");
scanf("%c", &ch);
switch (ch) {
case 'y':
puts("you dead!");
break;
case 'n':
puts("you couldn't escape");
break;
default: puts("you should keep the rule!");
}
puts("GAME OVER");
getchar();
return 0;
}
[\code]
現段階ではこれがすべてです
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 19:08
by Butter
ソースファイルはそれ一つだけですか?
main関数は無いんですか?
何度もすいません
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 19:16
by blue
これだけです
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 19:22
by Butter
う~ん、とりあえず、
コード:
int main(){
GameMsg001();
return 0;
}
みたいなmain関数を追加したら
どうですか?
あと、ファイルの先頭に
GameMsg002()など、まだ定義されていない
関数のプロトタイプ宣言があるようですが、
コンパイラから見たら、
「は?あるって書いてあったのに
GameMsg002関数ねぇじゃん❗」って
なるので、まだ定義していない関数の
プロトタイプ宣言は、コメントアウトするのが
無難かと思います。
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 20:50
by みけCAT
エラーの原因は、プログラムの実行をmain関数から始めることになっているのに、そのmain関数が無いことですね。
Butter さんが書きました: ↑4年前
あと、ファイルの先頭に
GameMsg002()など、まだ定義されていない
関数のプロトタイプ宣言があるようですが、
コンパイラから見たら、
「は?あるって書いてあったのに
GameMsg002関数ねぇじゃん❗」って
なるので、
コンパイラから見たら、宣言がある時点でその関数は「ある」ということになります。
すなわち、関数を呼び出すコードがあるとき、引数や戻り値をどう扱うかがわかります。
コンパイルの段階ではそれで処理に十分であり、関数の定義は必要ありません。
(このため、関数の宣言だけを(ヘッダなどから)読んでコンパイルし、定義は別にコンパイルすることが可能になります)
Butter さんが書きました: ↑4年前
まだ定義していない関数の
プロトタイプ宣言は、コメントアウトするのが
無難かと思います。
ただし、1つまたは複数のコンパイルの結果をまとめて1個の実行可能ファイルにするリンクの段階において、
実際にその関数を使っているのに定義が無いと、困ってしまいます。(エラーになります)
間違って未実装の関数を使おうとしたことにコンパイルの段階で気付けるメリットも考えられるので、
「コメントアウトするのが無難」という主張は間違っているとはいえません。
Re: エラーの原因がわからない
Posted: 2020年8月24日(月) 22:42
by blue
初心者すぎて申し訳ありません。
ソースコード付きでの説明は可能でしょうか?
言葉だけだとまだ理解しきれないところがあるので。
Re: エラーの原因がわからない
Posted: 2020年8月25日(火) 23:06
by box
う~ん、とりあえず、
コード:
int main(){
GameMsg001();
return 0;
}
みたいなmain関数を追加したら
どうですか?
とか、
エラーの原因は、プログラムの実行をmain関数から始めることになっているのに、そのmain関数が無いことですね。
とかの的確な回答があるのに、それが理解できないってことですか?