Avertissement: "la déclaration implicite de la fonction' ... ' n'est pas valide en C99"

Je reçois cet avertissement quand j'essaie de comparer les composants RVB de deux UIColors

Dans .h fichier, j'ai déclaré ceci

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

Dans .m fichier

 - (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));
  }

Et puis dans le même .m fichier, je compare 2 UIColors comme ceci

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

J'ai fait des recherches et les gens disent que je dois inclure le fichier d'en-tête. Je l'ai fait mais je n'ai pas aidé dans mon cas. Pourquoi j'obtiens cette erreur?

26
demandé sur Brock Adams 2012-01-25 02:07:16

3 réponses

C'est parce que vous avez défini votre fonction comme une méthode d'instance, pas une fonction. Il y a deux solutions.

L'un d'entre eux est ceci pour changer votre déclaration de méthode à ceci:

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

Ou, vous pouvez changer votre appel à ceci:

int d = [self ColorDiff:C1:C2];
22
répondu Richard J. Ross III 2012-01-24 22:10:13

La déclaration dans votre .le fichier h ne correspond pas à votre implémentation dans votre .m de fichier.

Si la mise en œuvre de votre méthode dans votre .m ressemble à ceci:

 - (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));
}

Que vous devriez déclarer comme ça dans .h:

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

Et de l'appeler de ce même .m Fichier, utiliser:

int d = [self ColorDiffBetweenColorOne:C1 AndColorTwo:C2];
3
répondu AtkinsonCM 2012-01-24 22:16:14

Il manque un prototype dans le fichier H.!

1
répondu Patricia Beier 2014-11-05 12:48:01