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.
私は調査を行い、ヘッダーファイルを含める必要があると人々は言います。私はこれをやったが、私の場合には助けにはならなかった。このエラーが発生するのはなぜですか?
これは、関数を関数ではなくインスタンスメソッドとして定義したためです。 2つの解決策があります。
その1つは、メソッド宣言を次のように変更することです。
int ColorDiff(UIColor *color1, UIColor *color2) {
// colorDiff's implementation
}
または、コールをこれに変更できます:
int d = [self ColorDiff:C1:C2];
.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];
H.fileにプロトタイプがありません!