web-dev-qa-db-fra.com

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

J'obtiens cet avertissement lorsque j'essaie de comparer les composants RVB de deux UIColors

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

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

Dans un fichier .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));
  }

Et puis dans le même fichier .m, je compare 2 UIColors comme celui-ci

 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 ai-je cette erreur?

26
JHHoang

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'eux est celui-ci pour changer votre déclaration de méthode en ceci:

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

Ou, vous pouvez changer votre appel en ceci:

int d = [self ColorDiff:C1:C2];
22
Richard J. Ross III

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

si l'implémentation 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 devez le déclarer ainsi en .h:

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

et pour l'appeler à partir de ce même fichier .m, utilisez:

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

Il manque un prototype dans le fichier h.file!

1
Patricia