我无法在C++中传递通过以下方式初始化的2D数组。main
功能,以 addMatrix
功能。
ERROR MESSAGE Main.cpp: 在函数'int main()'中。Main.cpp:15:23: 错误:无法将参数'1'的'int ()[((((sizetype))(((sizetype)c) + -1)) + 1)]'转换为'int',改为'void addMatrix(int, int*, int, int)' addMatrix(a,b,r,c)。
void addMatrix(int**, int**, int, int);
int main()
{
int r, c, i, j;
cin >> r >> c;
int a[r][c], b[r][c];
// ASSUME HAVE TAKEN INPUTS FROM BOTH THE MATRIX A AND B
addMatrix(a, b, r, c);
}
void addMatrix(int** a, int** b, int r, int c)
{
int i, j, d[r][c];
for(i = 0; i < r; i++)
for(j = 0; j < c; j++)
d[i][j] = a[i][j] + b[i][j];
for(i = 0; i < r; i++)
{
for(j = 0; j < c; j++)
cout << d[i][j] << " ";
cout << endl;
}
}
这些声明的数组
int a[r][c],b[r][c];
中使用的表达式,例如函数参数被隐式地转换为指向其类型的第一个元素的指针。int ( * )[c]
.
然而,相应的函数参数的类型为 int **
.
void addMatrix(int **,int **,int,int);
所以编译器会发出一个错误,因为这些类型不兼容。
注意,可变长度数组不是标准的C++功能。
请使用类模板的对象来代替 std::vector
.
如果你的编译器支持可变长度的数组,那么函数的声明应该是这样的
void addMatrix( int, int, int [][*], int [][*] );
或者,如果声明与函数定义同时进行,那么
void addMatrix( int r, int c, int [][c], int [][c] );
或
void addMatrix( int r, int c, int [r][c], int [r][c] );