此问题是上一个问题的延续:
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()答案 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的误导性较小。