5

関数からfloat値を返す非常に単純なプログラムをCで作成しようとしましたが、何らかの理由でエラーが発生しました。

#include<stdio.h>
int main(){
    double returning;
    returning = regre();
    printf("%f", returning);
    return 0;
}
double regre(){
    double re = 14.35;
    return re;
}

発生しているエラーは次のように述べています。

'regre'の競合するタイプ

以前の暗黙の悔恨の宣言はここにありました

4

3 に答える 3

9

そのエラーメッセージは、何が起こっているのかを正確に示しています。のregre後に定義しないため、の暗黙の宣言がありますmain()。前方宣言を追加するだけです。

double regre();

の前main()、または関数全体を上に移動します。

于 2012-10-13T03:41:57.280 に答える
2
previous implicit declaration of `regre` was here

関数が不明な場合、コンパイラーはそれをint functionname()デフォルトと見なします。あなたの場合、int regre()ここで宣言されます。

conflicting types for 'regre' 

実際の機能double regre()に気付くと、この競合エラーが発生します。この問題を解決するには、実際に使用する前にdouble regre()関数を宣言する必要があります。

#include<stdio.h>
double regre(); //Forward Declaration
int main(){
    double returning;
    returning = regre();
    printf("%f", returning);
    return 0;
}
double regre(){
    double re = 14.35;
    return re;
}

前方宣言の詳細については、次のリンクを参照してください。

http://en.wikipedia.org/wiki/Forward_declaration

于 2012-10-13T06:08:08.353 に答える
0

Cでは、値による呼び出しまたは参照による呼び出しのいずれかで関数を使用する場合は常に、これらの関数はデフォルトでint型になります。そのタイプの関数を使用する場合は、その関数を呼び出す前に、プログラムで関数プロトタイプを定義する必要があります。最良の方法は、プログラミングの良い方法であるメイン自体の前にすべての関数プロトタイプを定義することです。プログラムに来て、プロトタイプをdouble regre();として定義するだけです。メインの前に

double regre();
    main()
      {
于 2013-02-02T21:18:46.730 に答える