2012-01-24 98 views
26

我收到的時候我試圖RGB分量比較兩個UIColors警告:「功能的隱式聲明‘......’在C99" 無效

在.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. 

我做過研究,人們說我必須包含頭文件。我這樣做,但沒有幫助我的情況。 爲什麼我得到這個錯誤?

回答

22

這是因爲您將您的函數定義爲實例方法,而不是函數。有兩種解決方案。

其中之一是給你的方法聲明改成這樣:

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

或者,您可以將您的呼叫改成這樣:

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

非常感謝。我並沒有那麼做。 – JHHoang

3

在.h文件中聲明沒有按」 t匹配你的.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]; 
+0

謝謝你的回答。這是一個錯字。正如理查上面提到的,我只是改變了[自我ColorDiff:C1:C2]; – JHHoang

+0

@JHHang這也肯定會解決這個問題。但是,您仍然可以考慮將您的方法重命名爲更友好的用戶界面。如果沒有關鍵字來區分你的兩個參數,你的方法就不那麼清晰。查看文檔:(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-BCIGIJJF) – AtkinsonCM

+0

感謝你的評論。那是我的第一稿。我一直在努力,並確保它在我使用戶更友好之前運行良好。我知道這很糟糕。再次感謝 – JHHoang

1

在h.file中沒有原型!

相關問題