С++ Вставка объекта 2D-массива в другой объект 2D-массива

Используя Dev C++, я пытаюсь вставить меньший объект 2D-массива в более крупный объект 2D-массива. Пытаясь добиться этого, я столкнулся с ошибками компилятора, которые я не знаю, как решить.

Я пытаюсь вставить меньший объект, заставляя его возвращать имя массива. Затем я пытаюсь изменить значения внутри большого массива значениями меньшего массива.

Есть две строки кода, с которыми у меня проблемы:

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

И внутри этих двух строк кода:

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

и

void Grid::extractArray( int** arr )
{
    for(int i = 0; i < xGrid ; ++i)
    {
         for (int j = 0; j < yGrid ; ++j)
         {
             squares[i][j] = arr[i][j];
                 }
    }
}

Две проблемы заключаются в том, что «результат int» не будет содержать smallArray.extractPiece(), и если я просто поставлю «smallerArray.extractPiece()» в более крупныйArray.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

Кто-нибудь знает, что не так?


person Community    schedule 27.12.2008    source источник


Ответы (2)


Это именно этот кусок кода:

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

person Johannes Schaub - litb    schedule 27.12.2008
comment
Это сработало, но проблема в том, что теперь smallArray.extractPiece() теперь возвращает адрес указателя на указатель, а я хочу, чтобы он вернулся к значению, что я могу сделать? - person ; 27.12.2008

Послушайте, всегда, по крайней мере для меня, было проще управлять 2D-массивами внутри как 1D-массивами, где M[i,j]=A[i*N+j], где N — количество столбцов (или строк, если 2D-массивы тип строки-столбца). Пользователи могут получать элементы с индексами i,j, но мой класс всегда хранит A[M * N] как частные данные. Передача массивов одномерных указателей проще, чем управление массивами двумерных указателей (вы не можете попасть в синтаксис указателя на указатель, который может запутаться в некотором коде).,

Это не связано с этим вопросом, но, поскольку я не знаю о конкретных функциях оптимизации компилятора, мне интересно, преобразуется ли M[i,j] в A[i] внутри для использования более простых режимов адресации в сгенерированном коде.

person Hernán    schedule 27.12.2008