0

这个问题是前一个问题的延续:

C++ 返回和插入二维数组对象

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

我遵循了亚当罗森菲尔德的回答,它解决了前两个问题。然而,前两个高涉及的最后一个问题尚未解决。我不确定问题是我尝试纠正代码的方式,还是尝试的内容有问题。

这是 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

我不确定是不是这个论点是错误的,还是我正在尝试的东西是错误的。这是我尝试编译时收到的:

在函数“int main()”中
从 `int' 到 `int(*)[4][4]' 的无效转换
初始化 `void Grid::insertArray(int(*)[4][4])' 的参数 1
[构建错误] [grid test.o] 错误 1

我试过这些:

myGrid.insertArray((*arrayPtr)[4][4]); //同样的错误
myGrid.insertArray((*arrayPtr)[i][j]); //同样的错误

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

"在 insertArray() 的参数中接受 returnpiece();

4

2 回答 2

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());
于 2009-01-05T16:35:51.180 回答
0

我看到几个问题:

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

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

3) 样式说明:查看您的上一篇文章,insertArray 的代码不会执行“插入”,因为该词通常在编程中使用。插入是指将元素添加到序列(例如数组或链表)而不删除之前存在的任何内容。您的代码执行复制,因此 copyArray 或 setArray 的误导性较小。

于 2009-01-02T01:40:06.163 回答