0

オブジェクト ファースト アプリを作成していますが、コンパイラでエラーが発生する理由がわかりません。(intコードで動作します...)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {


        // 1st var
        NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));

    }
    return 0;
}
float res (float a, float b, float c)
{
    float res=a+b+c;
    return res;
}
4

3 に答える 3

4

resmain の前に宣言してみて、 main. 事前に宣言しないと、次のようになります。

  1. コンパイラはbodyで最初に遭遇resします。main

  2. の内部で呼び出されるres方法から推測できることに基づいて、 の「暗黙の宣言」を構成します。これは、C の規則に従って、戻り値の型を意味します。resmainint

  3. 後で実数resが見つかった場合、推測されたシグネチャ (つまり、戻り値の型) と実数の間の不一致により、コンパイル エラーが発生します。

それを修正するには:

float res (float a, float b, float c);

int main(int argc, const char * argv[])
{
  @autoreleasepool {

    // 1st var
    NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));
  }
  return 0;
}

float res (float a, float b, float c)
{
  float res=a+b+c;
  return res;
}
于 2012-12-21T11:04:10.617 に答える
1

関数を宣言するのを忘れているだけです。

float res (float a, float b, float c);

あなたの前にint main

それがあなたを助けることを願っています!

于 2012-12-21T11:06:56.850 に答える
0

試す:

#import <Foundation/Foundation.h>

float res (float a, float b, float c)
{
    float res=a+b+c;
    return res;
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {


        // 1st var
        NSLog(@"Hi, %f World!", res(1.0f, 2.0f, 3.0f));

    }
    return 0;
}
于 2012-12-21T11:06:34.127 に答える