C:二进制的无效操作数> (有'float'和'float(*)(float **,long int,long int,short int *)')

时间:2013-07-03 19:05:33

标签: c

我写了一个非常简单的代码来查找数组中的max。我无法弄清楚这里有什么问题...

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 个答案:

答案 0 :(得分:8)

你设法超越自己。 maxValue是函数的名称,maxvalue是局部变量的名称。再次检查拼写。并在下次选择更好的名字。

答案 1 :(得分:2)

这是一个错字:使用

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

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

您已声明变量float maxvalue(非大写'v')和函数maxValue(...)(大写'v') - 因此编译器会尝试将该函数用作第二个操作数在那里使用maxValue进行比较。

请注意,C具有重要意义 - 因此maxvaluemaxValue是不同的符号,但需要正确使用。

理想情况下,请尝试通过选择更好的名称来避免此类问题 - 例如,使用getMaxValue()calculateMaxValue()作为函数名称。

除此之外,if((ArrayIn[i][j]>maxvalue)==1)不必要地复杂 - 只需使用

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