传递2D数组作为参数

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

我正在运行我的代码,但得到这个错误,我不知道如何处理它。

我的代码。

#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define LIMIT 5
int m;

void dfs(int i,int j,int k,int kk,int mat[][1000],bool vis[101][101],int n,int m) {
    if(i<0 || i>n-1 || j<0 || j>m-1)
        return;
    if(mat[i][j]!=kk)
        return;
    if(vis[i][j])
        return;
    mat[i][j] = k;
    dfs(i,j+1,k,kk,mat,vis,n,m);
    dfs(i,j-1,k,kk,mat,vis,n,m);
    dfs(i+1,j,k,kk,mat,vis,n,m);
    dfs(i+1,j+1,k,kk,mat,vis,n,m);
    dfs(i+1,j-1,k,kk,mat,vis,n,m);
    dfs(i-1,j,k,kk,mat,vis,n,m);
    dfs(i-1,j-1,k,kk,mat,vis,n,m);
    dfs(i-1,j+1,k,kk,mat,vis,n,m);
}

int main() {
    int t;
    cin>>t;
    while(t--) {
        int n,m;
        bool vis[101][101];
        cin>>n>>m;
        int mat[101][101];
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                cin>>mat[i][j];
        int x,y,k;
        cin>>x>>y>>k;
        int kk = mat[x][y];

        dfs(x,y,k,mat,vis,n,m);
    }
    return 0;
}

这个错误

cpp:41:13: error: invalid conversion from ‘int (*)[101]’ to ‘int’ [-fpermissive]
41 |   dfs(x,y,k,mat,vis,n,m);
   |             ^~~
   |             |
   |             int (*)[101]

先谢谢你

c++ arrays function multidimensional-array
1个回答
2
投票

你的函数调用中有一个错别字,它少了一个参数,4。int 在第5个参数,即二维数组之前,必须要有参数,我猜你忘了包括第4个参数。kk. 这就是导致编译错误的原因。

修正这个问题并不能解决你的问题,因为你不能传递一个带维数的数组。(*)[101] 的函数,接收一个带有 (*)[1000] 维度,它们必须匹配,这些都被认为是不兼容的类型。

要么声明 mat 作为。

 int mat[1000][1000];

或者把函数声明改成:

void dfs(int i, int j, int k, int kk, int mat[][101], bool vis[101][101], int n, int m)
                                                ^^^

0
投票

在你的dfs函数中还有一个int参数(kk), 但你在第41行忽略了它: dfs(x,y,k,mat,vis,n,m);你应该在k后面再写一个整数值

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