【问题标题】:C++ Inserting 2D array Object into another 2D array ObjectC ++将二维数组对象插入另一个二维数组对象
【发布时间】:2008-12-27 07:00:39
【问题描述】:

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

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

有两行代码我有问题:

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

在这两行代码中:

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

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

两个问题是“int result”不会持有smallerArray.extractPiece(), 如果我只是将“smallerArray.extractPiece()”放在 largeArray.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

有谁知道怎么回事?

【问题讨论】:

    标签: c++ multidimensional-array


    【解决方案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**)

    【讨论】:

    • 它工作了,但问题是现在它smallerArray.extractPiece() 现在将指针的地址返回到指针,而我希望它返回值,我该怎么办?跨度>
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多