2012-01-24 26 views
26

Tôi nhận được cảnh báo này khi tôi đang cố gắng so sánh các thành phần RGB của hai UIColorsCẢNH BÁO: "tuyên bố ngầm về chức năng '...' không hợp lệ trong C99"

Trong tệp .h, tôi đã tuyên bố điều này

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

trong file .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)); 
    } 

Và sau đó trong file .m cùng, tôi so sánh 2 UIColors như thế này

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

Tôi đã nghiên cứu và mọi người nói rằng tôi phải bao gồm tệp tiêu đề. Tôi đã làm điều này nhưng không giúp đỡ trong trường hợp của tôi. Tại sao tôi nhận được lỗi này?

Trả lời

22

Đó là vì bạn đã xác định hàm của mình làm phương pháp thể hiện chứ không phải hàm. Có hai giải pháp.

Một trong số đó là này để thay đổi phương pháp kê khai của bạn như thế này:

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

Hoặc, bạn có thể thay đổi cuộc gọi của bạn như thế này:

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

Cảm ơn bạn rất nhiều. Tôi đã không thực sự đó. – JHHoang

3

Việc kê khai trong hồ sơ của bạn không .h' t khớp với việc triển khai của bạn trong tệp .m của bạn.

nếu việc thực hiện các phương pháp của bạn trong .m của bạn trông như thế này:

- (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ơn bạn nên khai báo nó như thế này trong .h:

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

và gọi nó là từ cùng .m tệp, sử dụng:

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

Cảm ơn câu trả lời tuyệt vời của bạn. Đó là một lỗi đánh máy. Như Richard đã đề cập ở trên, tôi chỉ thay đổi [Self ColorDiff: C1: C2]; – JHHoang

+0

@JHHoang Điều đó chắc chắn sẽ giải quyết được vấn đề. Nhưng bạn vẫn có thể xem xét đổi tên phương thức của mình thành một cái gì đó thân thiện với người dùng hơn. Không có từ khoá để phân biệt hai đối số của bạn, phương thức của bạn không rõ ràng. Xem tài liệu: (http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-BCIGIJJF) – AtkinsonCM

+0

Cảm ơn bình luận của bạn. Đó là bản nháp đầu tiên của tôi. Tôi luôn cố gắng và chắc chắn rằng nó hoạt động tốt trước khi tôi làm cho nó thân thiện với người dùng hơn. tôi biết nó xấu. Cảm ơn một lần nữa – JHHoang

1

Có một mẫu thử bị thiếu trong h.file!

Các vấn đề liên quan