まず第一に、私はQueen
とPiece
間の依存関係を理解していないので、私はPiece
がQueen
のスーパータイプであると仮定し、割り当てPiece * mx = new Queen();
が正しいです。型の不一致の明白な問題を解決するには
あなたは
void changeToQueen(Piece* mx[7][7])
と8 x 8
に7(for (int i = 0; i < 7; i++)
)またはマトリックスのサイズにループの境界線を変更して(とにご
void changeToQueen(Piece* mx)
を変更することができます同じループ)これは動作します。
しかし私の提案は、データを格納する方法を考えることです。 おそらく、あなたは7x7の異なるサイズの行列を構築する必要があるので、(この例では唯一の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;
}
注:&
看板in void changeToQueen(Queen*** &mx, int size)
関数内のポインタQueen *** matrix;
を変更できるようにするchangeToQueen
'void changeToQueen(Piece * mx [7] [7])' –
ループ条件で判断すると、 'Piece * matrix [8] [8];'が必要です。 –
あなたはメモリリークを持っています –