C ++,从`int *'到`int'的错误无效转换

时间:2012-12-04 15:19:00

标签: c++

我有以下C ++代码:

#include <iostream>
using namespace std;
int main(){
}
int findH(int positionH[]){
    return positionH;         //error happens here.
}

编译器抛出错误:

invalid conversion from `int*' to `int'

这个错误是什么意思?

4 个答案:

答案 0 :(得分:5)

positionH[]是一个数组,其返回类型为int

编译器不允许你这样做。将参数设为int:

int findH(int positionH){
    return positionH;        
}

或者使返回类型成为指向int的指针:

int* findH(int positionH[]){
    return positionH;        
}

或者在返回之前将数组转换为整数:

int findH(int positionH[]){
    return positionH[0];
}

答案 1 :(得分:2)

这一行是无效的C ++(也是无效的C,你的代码似乎写在其中):

int bla[2] = findH(field, positionH);

bla是一个包含2个元素的数组,不能以这种方式初始化。 findH返回int。

答案 2 :(得分:0)

错误是由于您返回指针并且编译器期望int。

引起的

int *和int之间有很大的区别。

另外,为什么要返回positionH,数组是通过引用传递的,不需要返回它。

更好的代码将是

void option1(char** field, int[])   
   {
     int  findH(char **, int[]); 
     int positionH[2];
    findH(field, positionH);
      //positionH passed by reference, no need to return it
    }

void  findH(char **field, int positionH[])
{
    for(int n = 0;n < 14 ; n++)
    {
        for(int m = 0; m < 14; m++)
        {
                   if(field[m][n] == 'H')
                   {

                   positionH[0] = n;
                   positionH[1] = m;

        }
         }
    }

}

答案 3 :(得分:0)

尝试执行此错误时会出现。

int * p = 10;

这意味着您正在将int值分配给pointertoint(* p)。

但是指针正在存储地址,这意味着* p将10作为地址。

所以 只需

int i = 10; int * p =&i; 要么 p =&i;

它不会给出任何错误