警告:“隐含的功能声明'......'在C99中无效”

时间:2012-01-24 22:07:16

标签: ios gcc-warning

当我尝试比较两个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个UIColors

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

我做了研究,人们说我必须包含头文件。我这样做但在我的情况下没有帮助。 为什么我会收到此错误?

3 个答案:

答案 0 :(得分:22)

这是因为您将函数定义为实例方法,而不是函数。有两种解决方案。

其中一个是将方法声明更改为:

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

或者,您可以将此呼叫更改为:

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

答案 1 :(得分:3)

.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];

答案 2 :(得分:1)

h.file中缺少原型!