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?
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];
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];
Il manque un prototype dans le fichier h.file!