2012-01-24 10 views
26

estoy recibiendo esta advertencia cuando estoy tratando de comparar dos componentes RGB de UIColorsADVERTENCIA: "declaración implícita de la función '...' no es válido en C99"

En archivo .h, declaré esto

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

en el archivo .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)); 
    } 

Y luego, en mismo archivo .m, comparo 2 UIColors como este

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

Investigué y la gente dice que debo incluir el archivo de encabezado. Hice esto pero no ayudó en mi caso. ¿Por qué recibo este error?

Respuesta

22

Es porque usted definió su función como un método de instancia, no como una función. Hay dos soluciones.

Una de ellas es que esto cambie su declaración de método a esto:

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

O bien, puede cambiar la llamada a este:

int d = [self ColorDiff:C1:C2]; 
+0

Muchas gracias. Realmente no lo hice. – JHHoang

3

La declaración en su archivo .h doesn' iguala tu implementación en tu archivo .m

si la aplicación de su método en su .m se ve así:

- (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 debiera declarar así en .h:

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

y llamarlo de esa misma archivo .m, use:

int d = [self ColorDiffBetweenColorOne:C1 AndColorTwo:C2]; 
+0

Gracias su gran respuesta. Eso fue un error tipográfico Como Richard mencionó anteriormente, acabo de cambiar [self ColorDiff: C1: C2]; – JHHoang

+0

@JHHoang Eso definitivamente resolverá el problema, también. Pero aún puede considerar cambiar el nombre de su método a algo más fácil de usar. Sin palabras clave para distinguir sus dos argumentos, su método no es tan claro. Consulte la documentación: (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-BCIGIJJF) – AtkinsonCM

+0

Gracias por tu comentario. Ese fue mi primer borrador. Siempre estoy intentando st y me aseguro de que funcione bien antes de que sea más fácil de usar. Sé que es malo. Gracias de nuevo – JHHoang

1

¡Falta un prototipo en el archivo h.file!

Cuestiones relacionadas