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