我有以下C ++代码:
#include <iostream>
using namespace std;
int main(){
}
int findH(int positionH[]){
return positionH; //error happens here.
}
编译器抛出错误:
invalid conversion from `int*' to `int'
这个错误是什么意思?
答案 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;
它不会给出任何错误