在使用Dev C ++时,我试图将较小的2D数组对象插入到较大的2D数组对象中。在尝试实现这一目标时,我遇到了编译器错误,我不知道如何解决。
我尝试通过返回数组的名称来插入较小的Object。然后我尝试使用较小数组的值更改大数组内的值。
我遇到两行代码:
int result = smallerArray.extractPiece();
largerArray.extractArray(result);
在这两行代码中:
int Piece::extractPiece()
{
return **pieceArray;
}
和
void Grid::extractArray( int** arr ) { for(int i = 0; i < xGrid ; ++i) { for (int j = 0; j < yGrid ; ++j) { squares[i][j] = arr[i][j]; } } }
两个问题是“int result”不会持有smallerArray.extractPiece(), 如果我只是在largeArray.extractArray()中放入“smallerArray.extractPiece()”,我仍然会遇到问题。我试图将“int result”作为指针指针,作为“int ** result”,我仍然有相同的错误。
这些是我在Dev C ++中编译时遇到的错误:
In function `int main()';
invalid conversion from `int' to `int**'
initlizing argument 1 of 'void Grid::extractArray(int**)'
[Build Error] [grid test.o] Error 1
有谁知道什么是错的?
答案 0 :(得分:1)
正是这一堆代码:
int result = smallerArray.extractPiece();
largerArray.extractArray(result);
// ...
int Piece::extractPiece() {
return **pieceArray;
}
尝试将一个int传递给extractArray,它想要一个指向指针的指针,可以推测你的动态数组,而不是int。尝试将其更改为
int **result = smallerArray.extractPiece();
largerArray.extractArray(result);
// ...
int ** Piece::extractPiece() {
return pieceArray;
}
仅将结果更改为指针指针将不起作用。您当然还必须更改extractPiece返回的内容(从int更改为int **)
答案 1 :(得分:1)
看,总是至少对我而言,内部管理二维数组比一维数组更容易,其中M [i,j] = A [i * N + j]其中N是cols(或行数,如果是2D数组是行列类型)。用户可以获得带有i,j索引的元素,但我的类总是将A [M * N]存储为私有数据。传递1-D指针数组比管理2-D指针数组更容易(你不能陷入指针指针语法,这在某些代码中会变得混乱)。,
这与此问题无关,但由于我不知道特定的编译器优化内在函数,我想知道M [i,j]是否在内部转换为A [i]以在生成的代码中使用更简单的寻址模式。