2013-07-03 21 views
0

我寫了一個非常簡單的代碼來查找數組中的最大值。我無法弄清楚什麼是錯在這裏...C:無效的操作數爲二進制>(有'浮動'和'浮動(*)(浮動**,長整型,長整型,短整型*)')

float maxValue(float **ArrayIn, long length, long width, short* result_coor){ 
    int i,j; 
    float maxvalue = ArrayIn[0][0]; 
    for(i=0;i<length;i++){ 
     for(j=0;j<width;j++){ 
      if((ArrayIn[i][j]>maxValue)==1){ 
       maxValue = ArrayIn[i][j]; 
       result_coor[0] = i; 
       result_coor[1] = j; 
      } 
     } 
    } 
    return maxvalue; 
} 

我得到這個錯誤:

array_processing.c: In function ‘maxValue’: 
array_processing.c:9:20: error: invalid operands to binary > (have ‘float’ and ‘float 
(*)(float **, long int, long int, short int *)’) 
array_processing.c:10:13: error: lvalue required as left operand of assignment 
make: *** [array_processing.o] Error 1 

回答

2

這是一個錯字:使用

if((ArrayIn[i][j]>maxvalue)==1){ 
        ^
        !!! 

maxvalue = ArrayIn[i][j]; 
    ^
     !!! 

您已聲明變量float maxvalue(非ca ('v')和一個函數maxValue(...)(大寫'v') - 所以當你在那裏使用maxValue時,編譯器試圖使用該函數作爲比較的第二個操作數。

請記住,C是大小寫的 - 所以maxvaluemaxValue是不同的符號,但它們需要正確使用。

理想情況下,通過選擇更好的名稱來嘗試避免此類問題 - 例如,使用getMaxValue()calculateMaxValue()作爲函數名稱。

除此之外,if((ArrayIn[i][j]>maxvalue)==1)是不必要的複雜 - 簡單地使用

if(ArrayIn[i][j] > maxvalue) 
+3

也'maxvalue = ArrayIn [i] [j];' – Wug

+0

非常感謝。我必須改變名稱maxvalue完全COS這是相同的功能的名稱... – nineties

8

你設法智取自己。 maxValue是函數的名稱,而maxvalue是局部變量的名稱。再次檢查拼寫。下次選擇更好的名字。

+0

哎呀...非常感謝 – nineties

相關問題