web-dev-qa-db-ja.com

警告:「関数 '...'の暗黙の宣言はC99では無効です」

2つのUIColorsのRGBコンポーネントを比較しようとすると、この警告が表示されます

.hファイルで、これを宣言しました

 -(int) ColorDiff:(UIColor *) color1 :(UIColor *)color2;

.mファイル内

 - (int) ColorDiff:(UIColor *) color1 :(UIColor *)color2{
   ... //get RGB components from color1& color2
   // compute differences of red, green, and blue values
   CGFloat red   = red1   - red2;
   CGFloat green = green1 - green2;
   CGFloat blue  = blue1  - blue2;

  // return sum of squared differences
  return (abs(red) + abs(green) + abs(blue));
  }

そして、同じ.mファイルで、このような2つのUIColorを比較します

 int d= ColorDiff(C1,C2);// I got the warning right here.

私は調査を行い、ヘッダーファイルを含める必要があると人々は言います。私はこれをやったが、私の場合には助けにはならなかった。このエラーが発生するのはなぜですか?

26
JHHoang

これは、関数を関数ではなくインスタンスメソッドとして定義したためです。 2つの解決策があります。

その1つは、メソッド宣言を次のように変更することです。

int ColorDiff(UIColor *color1, UIColor *color2) {
    // colorDiff's implementation
}

または、コールをこれに変更できます:

int d = [self ColorDiff:C1:C2];
22

.hファイルの宣言は、.mファイルの実装と一致しません。

.mでのメソッドの実装が次のように見える場合:

 - (int) ColorDiffBetweenColorOne:(UIColor *) color1 AndColorTwo:(UIColor *)color2
{
    ... //get RGB components from color1& color2
    // compute differences of red, green, and blue values
    CGFloat red   = red1   - red2;
    CGFloat green = green1 - green2;
    CGFloat blue  = blue1  - blue2;

    // return sum of squared differences
    return (abs(red) + abs(green) + abs(blue));
}

.hで次のように宣言する必要があります。

- (int) ColorDiffBetweenColorOne:(UIColor *) color1 AndColorTwo:(UIColor *)color2; 

同じ.mファイルから呼び出すには、次を使用します。

int d = [self ColorDiffBetweenColorOne:C1 AndColorTwo:C2];
3
AtkinsonCM

H.fileにプロトタイプがありません!

1
Patricia