【问题标题】:cannot convert ‘int (*)[m]’ to ‘int (*)[100000]无法将‘int (*)[m]’转换为‘int (*)[100000]
【发布时间】:2020-04-23 06:56:04
【问题描述】:

运行此代码时,我得到:

prog.cpp:67:33: error: cannot convert ‘int (*)[n][m]’ to ‘int
 (*)[100000]’ for argument ‘4’ to ‘int calculateP(int, int, int, int
 (*)[100000])’
       cout << calculateP(l,n,m,&a) << endl;

我尝试做了很多事情,但它们无济于事,错误仍然存​​在。希望快速响应如何消除此错误。

#include <iostream>
using namespace std;


int flr(int k){
    return (k-(k%2))/2;
}

int getPalindrome(int l, int x , int y, int b[100000][100000]){
    int num = 0;
    if(b[x-1][y] == b[x][y-1]){
        for(int n = 2; n < l+2; n+=2){
            if(b[x-n][y] != b[x][y-n]){
                return num;
            }else{
                if(b[x+n][y] != b[x][y+n]){
                    return num;
                }else{
                    num ++;
                }
            }
        }
        return num;} 
    else if(b[x-1][y] == b[x][y+1]){
        for(int n = 2; n < l+2; n+=2){
            if(b[x-n][y] != b[x][y+n]){
                return num;
            }else{
                if(b[x+n][y] != b[x][y-n]){
                    return num;
                }else{
                    num ++;
                }
            }
        }
        return num;
}
    else{return num;}
}


int calculateP(int l, int n, int m, int a[][100000]){
    int pairs = n*m;
    for(int x = l; x < n-l; x++){
        for(int y = l; y < m-l; y++){
            pairs += getPalindrome(l,x,y,a);
        }
    }
    return pairs;
}


int main() {
    int t;
    cin >> t;
    while(t--){
        int n, m, l;
        cin >> n >> m;
        if(n < m){l = flr(n-1);}
        else{l = flr(m-1);}
        int a[n][m];
        for(int i = 0; i< n; i++){
            for(int j = 0; j< m; j++){cin >> a[i][j];}
        }

        cout << calculateP(l,n,m,a) << endl;
    }

}

【问题讨论】:

  • int a[n][m]; 不是标准的C++ - 可能带有g++ 的标签?
  • 问题源于两个事实:第一是C++并不真正支持variable-length arrays;第二个是 narrays 的 m 整数数组将永远不会真正等于 10000 数组的数组 10000 整数,除非 nm 都完全等于 @987654334 @。要解决这两个问题,请改用std::vector
  • 你需要std::vector
  • 好的,谢谢!一定会试试这个
  • 这段代码实际上是针对矩阵问题的,所以知道如何将向量用于矩阵吗??

标签: c++ error-handling compiler-errors


【解决方案1】:

使用二维数组作为函数参数应该以不同的方式进行;

查看这个正确的代码,然后尝试像这样更改您的代码:

#define row_max 10
#define col_max 10

//you must know the size of array (row_max , col_max)
void foo(int (*mArray)[row_max][col_max]){

    //work with array this way :
    (*mArray)[2][2] = 10;

}
void main(void){
        int myarray[row_max][col_max] = {0};
        foo(&myarray);
}

【讨论】:

  • 在这段代码中,row max 和 col max 不能是变量吗??
  • ofc 可以;这只是一个例子
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多