Прежде всего, я не понимаю зависимостей между Queen
и Piece
, поэтому я полагаю, что Piece
супер-тип Queen
и назначение Piece * mx = new Queen();
является правильным.
Чтобы исправить очевидную проблему несоответствия типов вы можете изменить ваш
void changeToQueen(Piece* mx)
в
void changeToQueen(Piece* mx[7][7])
и с изменением Loops границу 7 (for (int i = 0; i < 7; i++)
) или размера матрицы к 8 x 8
(с те же петли), это сработает.
Но мое предложение - подумать о методе хранения данных. Возможно, вам нужно будет построить матрицу размера, отличного от 7х7, поэтому рассмотрим следующий пример, где динамическая память используется для хранения матрицы (в данном примере используется только Queen
):
void changeToQueen(Queen*** &mx, int size)
{
mx = new Queen**[size]; // allocation of memory for pointers of the first level
for (int i = 0; i < size; i++)
{
mx[i] = new Queen*[size]; // allocation of memory for pointers of the second level
for (int j = 0; j < size; j++)
{
mx[i][j] = new Queen(); // allocation of memory for object
}
}
}
int main()
{
int m_size = 7;
Queen *** matrix = NULL; // now memory not allocated for matrix
changeToQueen(matrix, m_size);
return 0;
}
Примечание: &
знак в void changeToQueen(Queen*** &mx, int size)
позволяет изменить указатель Queen *** matrix;
внутри функции changeToQueen
'void changeToQueen (Piece * mx [7] [7])' –
Судя по условиям цикла, вам нужна 'Piece * matrix [8] [8];'. –
У вас есть утечка памяти –