You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码报int与int**互相无效转换错误,该如何修复?

报错含义说明

你遇到的类型转换报错本质是函数参数声明的类型和实际传入的变量类型不匹配:

  • 你在main函数中定义的arr、solArr都是int**类型(二级指针,对应C++动态二维数组)
  • 但你声明isSafe、ratInmaze函数时,数组参数写的是int** arr[],这种写法等价于int*** arr(三级指针),和你传入的二级指针类型完全不匹配,编译器无法完成隐式类型转换,因此抛出无效转换报错。
修复步骤

除了参数类型错误,你的代码还有两处逻辑错误会导致运行结果不对,需要同步修正:

  • 第一步:修改两个函数的参数类型,把int** arr[]改为int** arr,int** solArr[]改为int** solArr,匹配你传入的二级指针类型
  • 第二步:修正isSafe函数的边界判断逻辑,原判断x > n && y > n完全写反,合法的坐标应该满足x >=0 && x <n && y >=0 && y <n
  • 第三步:修正ratInmaze函数到达终点的返回值,找到终点后应该返回true而非false,否则路径判断逻辑永远不会触发结果输出
修复后完整代码
#include <iostream>
using namespace std;

bool isSafe(int** arr, int x, int y, int n)
{
    if (x >= 0 && x < n && y >=0 && y < n && arr[x][y] == 1)
    {
        return true;
    }
    return false;
}

bool ratInmaze(int** arr, int x, int y, int n, int** solArr)
{
    if (x == n - 1 && y == n - 1)
    {
        solArr[x][y] = 1;
        return true;
    }

    if (isSafe(arr, x, y, n))
    {
        solArr[x][y] = 1;

        if (ratInmaze(arr, x + 1, y, n, solArr))
        {
            return true;
        }

        if (ratInmaze(arr, x, y + 1, n, solArr))
        {
            return true;
        }
        solArr[x][y] = 0;
        return false;
    }
    return false;
}

int main()
{
    int n;
    cin >> n;

    int **arr = new int *[n];
    for (int i = 0; i < n; i++)
    {
        arr[i] = new int[n];
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> arr[i][j];
        }
    }

    int **solArr = new int *[n];
    for (int i = 0; i < n; i++)
    {
        solArr[i] = new int[n];
        for (int j = 0; j < n; j++)
        {
            solArr[j][i] = 0;
        }
    }

    if (ratInmaze(arr,0,0,n,solArr))
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                cout<<solArr[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    // 释放动态申请的内存,避免内存泄漏
    for(int i=0; i<n; i++){
        delete[] arr[i];
        delete[] solArr[i];
    }
    delete[] arr;
    delete[] solArr;
    return 0;
}

内容的提问来源于stack exchange,提问作者divyanshu_31

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:27:02