C ++ Вставка 2D-массива Object в другой 2D-массив Object - PullRequest
0 голосов
/ 27 декабря 2008

При использовании 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 &lt xGrid ; ++i)
    {
         for (int j = 0; j &lt yGrid ; ++j)
         {
             squares[i][j] = arr[i][j];
                 }
    }
}

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

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

Ответы [ 2 ]

1 голос
/ 27 декабря 2008

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

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

1 голос
/ 27 декабря 2008

Именно эта связка кода:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...