0

在使用 Dev C++ 时,我试图将较小的 2D 数组对象插入到较大的 2D 数组对象中。在尝试实现这一目标时,我遇到了我不知道如何解决的编译器错误。

我尝试通过使其返回数组的名称来插入较小的对象。然后我尝试用较小数组的值更改大数组中的值。

有两行代码我有问题:

int result = smallerArray.extractPiece();
largerArray.extractArray(result);

在这两行代码中:

int Piece::extractPiece()
{
    return **pieceArray;
}

无效网格::extractArray(int** arr)
{
    for(int i = 0; i < xGrid ; ++i)
    {
         对于 (int j = 0; j < yGrid ; ++j)
         {
             平方[i][j] = arr[i][j];
                 }
    }
}

两个问题是“int result”将不包含smallerArray.extractPiece(),如果我只是将“smallerArray.extractPiece()”放入largerArray.extractArray()中,我仍然会遇到问题。我试图将“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

有谁知道出了什么问题?

4

2 回答 2

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**)

于 2008-12-27T07:09:45.080 回答
1

看,至少对我来说,将二维数组内部管理为一维数组更容易,其中 M[i,j]=A[i*N+j] 其中 N 是列数(或行数,如果二维数组是行列类型)。用户可以获得具有 i,j 索引的元素,但我的类始终将 A[M * N] 存储为私有数据。传递 1-D 指针数组比管理 2-D 指针数组更容易(您不能陷入在某些代码中可能会变得混乱的指针到指针语法)。,

这与这个问题无关,但由于我不知道具体的编译器优化内在,我想知道 M[i,j] 是否在内部转换为 A[i] 以在生成的代码中使用更简单的寻址模式。

于 2008-12-27T09:08:37.073 回答