ПРЕДУПРЕЖДЕНИЕ: "неявное объявление функции"... "недействительно в C99"
Я получаю это предупреждение, когда пытаюсь сравнить RGB-компоненты двух UIColors
В файле .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.
Я занимался исследованиями, и люди говорят, что я должен включать заголовочный файл. Я сделал это, но не помог в моем случае.
Почему я получаю эту ошибку?
Ответы
Ответ 1
Это потому, что вы определили свою функцию как метод экземпляра, а не функцию. Существует два решения.
Один из них заключается в изменении объявления вашего метода:
int ColorDiff(UIColor *color1, UIColor *color2) {
// colorDiff 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];
Ответ 3
В h.file отсутствует прототип!