エラーの原因がわからない

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

エラーの原因がわからない

#1

投稿記事 by blue » 3年前

コード:

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]
何回やってもエラーが出てしまいます。
どこをなおせばいいでしょうか?

Butter
記事: 18
登録日時: 3年前

Re: エラーの原因がわからない

#2

投稿記事 by Butter » 3年前

とりあえず、どんなエラーか具体的に
教えて下さい。
コンパイルエラーか、実行時エラーか
(実行時に固まるとか)、コンパイルエラーなら、
その種類も。

エラーの種類とかが書かれてないと、
答えられるものも答えられないと思います。
とても暇で忙しい

blue
記事: 6
登録日時: 3年前

Re: エラーの原因がわからない

#3

投稿記事 by blue » 3年前

エラー LNK1120 1 件の未解決の外部参照
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2019 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。
このようなエラーが出ました

Butter
記事: 18
登録日時: 3年前

Re: エラーの原因がわからない

#4

投稿記事 by Butter » 3年前

関数そのものに問題があるわけでばない気がします。
出来ればコードを全て乗せて頂けますか?
とても暇で忙しい

blue
記事: 6
登録日時: 3年前

Re: エラーの原因がわからない

#5

投稿記事 by blue » 3年前

#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]

現段階ではこれがすべてです

Butter
記事: 18
登録日時: 3年前

Re: エラーの原因がわからない

#6

投稿記事 by Butter » 3年前

ソースファイルはそれ一つだけですか?
main関数は無いんですか?
何度もすいません
とても暇で忙しい

blue
記事: 6
登録日時: 3年前

Re: エラーの原因がわからない

#7

投稿記事 by blue » 3年前

これだけです

Butter
記事: 18
登録日時: 3年前

Re: エラーの原因がわからない

#8

投稿記事 by Butter » 3年前

う~ん、とりあえず、

コード:

int main(){
   GameMsg001();
   return 0;
}
みたいなmain関数を追加したら
どうですか?

あと、ファイルの先頭に
GameMsg002()など、まだ定義されていない
関数のプロトタイプ宣言があるようですが、
コンパイラから見たら、
「は?あるって書いてあったのに
GameMsg002関数ねぇじゃん❗」って
なるので、まだ定義していない関数の
プロトタイプ宣言は、コメントアウトするのが
無難かと思います。
とても暇で忙しい

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

Re: エラーの原因がわからない

#9

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

エラーの原因は、プログラムの実行をmain関数から始めることになっているのに、そのmain関数が無いことですね。
Butter さんが書きました:
3年前
あと、ファイルの先頭に
GameMsg002()など、まだ定義されていない
関数のプロトタイプ宣言があるようですが、
コンパイラから見たら、
「は?あるって書いてあったのに
GameMsg002関数ねぇじゃん❗」って
なるので、
コンパイラから見たら、宣言がある時点でその関数は「ある」ということになります。
すなわち、関数を呼び出すコードがあるとき、引数や戻り値をどう扱うかがわかります。
コンパイルの段階ではそれで処理に十分であり、関数の定義は必要ありません。
(このため、関数の宣言だけを(ヘッダなどから)読んでコンパイルし、定義は別にコンパイルすることが可能になります)
Butter さんが書きました:
3年前
まだ定義していない関数の
プロトタイプ宣言は、コメントアウトするのが
無難かと思います。
ただし、1つまたは複数のコンパイルの結果をまとめて1個の実行可能ファイルにするリンクの段階において、
実際にその関数を使っているのに定義が無いと、困ってしまいます。(エラーになります)
間違って未実装の関数を使おうとしたことにコンパイルの段階で気付けるメリットも考えられるので、
「コメントアウトするのが無難」という主張は間違っているとはいえません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

blue
記事: 6
登録日時: 3年前

Re: エラーの原因がわからない

#10

投稿記事 by blue » 3年前

初心者すぎて申し訳ありません。
ソースコード付きでの説明は可能でしょうか?
言葉だけだとまだ理解しきれないところがあるので。

box
記事: 2002
登録日時: 13年前

Re: エラーの原因がわからない

#11

投稿記事 by box » 3年前

う~ん、とりあえず、

コード:

int main(){
   GameMsg001();
   return 0;
}
みたいなmain関数を追加したら
どうですか?
とか、
エラーの原因は、プログラムの実行をmain関数から始めることになっているのに、そのmain関数が無いことですね。
とかの的確な回答があるのに、それが理解できないってことですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

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