【问题标题】:WARNING: "implicit declaration of function '...' is invalid in C99"警告:“函数 '...' 的隐式声明在 C99 中无效”
【发布时间】:2012-01-24 22:07:16
【问题描述】:

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

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

【问题讨论】:

    标签: ios gcc-warning


    【解决方案1】:

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

    其中之一是将您的方法声明更改为:

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

    或者,您可以将调用更改为:

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

    【讨论】:

    • 非常感谢。我真的没有。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的出色回答。那是一个错字。正如理查德上面提到的,我只是改变了 [self ColorDiff:C1:C2];
    • @JHHoang 那肯定也能解决问题。但是您可能仍会考虑将您的方法重命名为对用户更友好的名称。如果没有关键字来区分您的两个参数,您的方法就不清楚。查看文档:(developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…)
    • 感谢您的评论。那是我的初稿。我一直在尝试 st 并确保它运行良好,然后再让它更加用户友好。我知道这很糟糕。再次感谢
    【解决方案3】:

    h.file 中缺少原型!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-07
      • 2023-03-17
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多