C++,从‘int*’到‘int’的错误无效转换

问题描述 投票:0回答:4

我有以下 C++ 代码:

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

编译器抛出错误:

invalid conversion from `int*' to `int'

这个错误是什么意思?

c++
4个回答
7
投票

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

编译器不会让你这样做。要么将参数设置为 int:

int findH(int positionH){
    return positionH;        
}

或者将返回类型设置为指向 int 的指针:

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

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

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

2
投票

此行是无效的 C++(也是无效的 C,您的代码似乎是用它编写的):

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

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


2
投票

当您尝试执行以下操作时会出现此错误:

int *p =10;

这意味着您正在将

int
值分配给指针
*p
.

但是指针存储的是地址,这意味着

*p
正在将
10
作为地址。

所以 就这样做:

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

p=&i;

它不会给出任何错误。


1
投票

导致错误的原因是您返回了一个指针,但编译器需要一个 int。

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

还有为什么要返回“positionH”,数组是通过内存地址传递的,不需要返回它。

更好的代码是:

  功能

// "field" 4 by 3, and "postionH" will got the last H letter
void  findH(char** field, int positionH[]) {

  for (int n = 0; n < 4 ; n++) {
    for (int m = 0; m < 3; m++) {

      if (field[m][n] == 'H') {
        positionH[0] = n;
        positionH[1] = m;

      }
    }
  }

}

 “主要”功能

int positionH[2];

char** field;
field = new char* [ 4 * sizeof(char*)];
for (int row = 0; row < 4; row++) {
  field[row] = new char[3 * sizeof(char)];
}
field[0] = "SHH";
field[1] = "SSH";
field[2] = "HSH";
field[3] = "SHS";

// Call the above funtion
findH(field, positionH);

// Release memory
for (int n = 0; n < 4; n++) {
  delete field[n];
}
delete [] field;

© www.soinside.com 2019 - 2024. All rights reserved.