【发布时间】: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整数,除非n和m都完全等于 @987654334 @。要解决这两个问题,请改用std::vector。 -
你需要
std::vector。 -
好的,谢谢!一定会试试这个
-
这段代码实际上是针对矩阵问题的,所以知道如何将向量用于矩阵吗??
标签: c++ error-handling compiler-errors