C ++将2D数组对象插入另一个

时间:2009-01-01 05:04:46

标签: c++ arrays syntax 2d

此问题是上一个问题的延续:

C++ Returning and Inserting a 2D array object

强烈建议您查看链接以了解以下内容。

我按照Adam Rosenfield的回答,解决了前两个问题。然而,最后一个问题还没有解决,前两个问题涉及哪个问题。我不确定问题是我如何尝试纠正代码,或者是否存在尝试的问题。

这是int main()中的一部分:

    int i, j;

    Grid myGrid;
    Piece myPiece;

    //First two lines of Adam's Code
    int (*arrayPtr)[4][4] = myPiece.returnPiece();
    int cell = (*arrayPtr)[i][j];

    //compiler error
    myGrid.insertArray(cell); <--- Problem

我不确定这个论点是错误的,还是我认为这是错误的。这是我在尝试编译时收到的内容:

In function `int main()'
invalid conversion from `int' to `int(*)[4][4]'
initializing argument 1 of `void Grid::insertArray(int(*)[4][4])'
[Build Error] [grid test.o] Error 1

我试过这些:


myGrid.insertArray((*arrayPtr)[4][4]); //Same Error
myGrid.insertArray((*arrayPtr)[i][j]); //Same Error

我不确定问题是什么,不确定该怎么做。我感谢亚当和其他人帮助我解决以前的问题,但有谁知道如何解决这个问题呢?

“在insertArray();

的参数中接受returnpiece()

2 个答案:

答案 0 :(得分:1)

int i, j;

Grid myGrid;
Piece myPiece;

//First two lines of Adam's Code
int (*arrayPtr)[4][4] = myPiece.returnPiece();
int cell = (*arrayPtr)[i][j];

//compiler error
myGrid.insertArray(cell); <--- Problem

如果要复制一块(或4x4部分),则必须将指针传递给该部分 Adam给出的函数采用类型(int * [4] [4])的参数,而不是整数

 void Grid::InsertArray(int (*arr)[4][4]) {
      for(int i = 0; i < x_ROWS; i++)
      {
          for(int j = 0; j < y_COLUMNS ; j++)
              squares[i][j] = (*arr)[i][j];
      } 
 }

所以你要传递给它arrayPtr

int i, j;

 Grid myGrid;
 Piece myPiece;

 //First two lines of Adam's Code
 int (*arrayPtr)[4][4] = myPiece.returnPiece();
 myGrid.insertArray(arrayPtr); 

或一行

myGrid.insertArray(myPiece.returnPiece());

答案 1 :(得分:0)

我看到一些问题:

1)您可能根本没有剪切和粘贴所有内容,但看起来您在{和1}}之前将cell设置为(*arrayPtr)[i][j]之前我和j有一个值 - 在C / C ++中它们不会自动初始化为0,它们的值可以是任何值(通常是荒谬的高/低数字,无论发生在那个位置的内存中)。

2)insertArray函数的目的是获取一个数组并将其插入另一个数组中。所以你应该传递一个数组。而是传递它cell,它是数组的单个元素。你想自己给它arrayPtr。在Adam的第一行代码中,[4] [4]是数组的一部分(它指定它是一个特殊的4x4数组)。但myGrid.insertArray((*arrayPtr)[4][4]);表示“取第四行中的元素和arrayPtr的第四列” - 在变量声明之外[4] [4]执行元素的实际查找。不同的语境,不同的含义。

3)样式注释:查看上一篇文章,insertArray的代码在编程时通常使用该单词的意义上不执行“插入”。插入是指向序列(例如数组或链接列表)添加元素而不删除之前存在的任何内容。您的代码执行副本,因此copyArray或setArray的误导性较小。