鍵はこれにあります:
「point_forward」の以前の暗黙の宣言はここにありました
96 行目には、次のものがあります。
point_forward(m); // where m is a mem_ptr;
コンパイラは の関数宣言をまだ見ていないためpoint_forward(m)
、int を返す関数を「暗黙的に定義」(つまり、想定) します。
int point_forward(mem_ptr m);
これは後の定義と矛盾します。
void point_forward (mem_ptr m) {
これを修正するには、次のいずれかを実行できます。
96 行目の前のどこかに明示的な宣言を置きます。これにより、関数の実装をまだ見ていない場合でも、96 行目にある場合void point_forward(mem_ptr m);
の処理方法がコンパイラに伝えられます。point_forward()
または、関数全体を 96 行より上で定義します (関数定義を 134 行から 96 行の上に移動します)。
関数の宣言についてもう少し説明します。
一般的に、スタイルについては、次のいずれかを行います。
point_forward()
他の C ファイルで使用したくない場合は、完全に定義します。
static void point_forward(mem_ptr m) { ..function body goes here.. }
ソースファイルの先頭。
他の C ファイルで使用する場合point_forward()
は、前方宣言を行います。
void point_forward(mem_ptr m);
他のファイルをインクルードするためのヘッダー ファイル。