Я думаю, у вас возникли проблемы с пониманием того, что объект CLI gc, такой как array ^, совсем не то же самое, что массив в стиле C ++.Вы не можете поменять их.Они расположены совершенно по-разному, и любой тип CLI находится в подвижной памяти, имеет определенные методы и т. Д., Тогда как массив C ++ - это просто блок памяти.В C ++ / CLI у вас есть выбор использования любого типа объекта, но так как вы, кажется, ожидаете использовать объект gc, я отредактировал ваш код, чтобы использовать его ниже.Синтаксис немного отличается, вы используете массив ^ в качестве параметров вашей функции (ссылка на двумерный массив int).Затем вы обращаетесь к массиву с индексированием в стиле CLI, таким как [0,1], а не [0] [1], как вы использовали бы в C ++.Не знаю, почему у вас были ROW_SIZE и COLUMN_SIZE, так как вы не использовали их, поэтому я удалил их.
public ref class TTT
{
public:
array<int, 2>^ matrix;
TTT::TTT()
{
matrix = gcnew array <int,2>(3, 3);
}
bool TTT::isaTie()
{
return 0;
}
bool TTT::isaTie2()
{
return 0;
}
int TTT::whoWins()
{
if ((checkRow(matrix))==1 || (checkColumn(matrix))==1 || (checkDiagonal(matrix))==1)
return 1;
else
return 0;
}
bool TTT::checkRow(array<int, 2>^ mat)
{
int row1 = mat[0,0] + mat[0,1] + mat[0,2];
int row2 = mat[1,0] + mat[1,1] + mat[1,2];
int row3 = mat[2,0] + mat[2,1] + mat[2,2];
if (row1 == 0 || row2 == 0 || row3 == 0)
{
return 1;
}
else if (row1 == 3 || row2 == 3 || row3 == 3)
{
return 1;
}
else
return 0;
}
bool TTT::checkColumn (array<int, 2>^ mat)
{
int col1 = mat[0,0] + mat[1,0] + mat[2,0];
int col2 = mat[0,1] + mat[1,1] + mat[2,1];
int col3 = mat[0,2] + mat[1,2] + mat[2,2];
if (col1 == 0 || col2 == 0 || col3 == 0)
{
return 1;
}
else if (col1 == 3 || col2 == 3 || col3 == 3)
{
return 1;
}else
return 0;
}
bool TTT::checkDiagonal (array<int, 2>^ mat)
{
int diag1 = mat[0,0] + mat[1,1] + mat[2,2];
int diag2 = mat[2,0] + mat[1,1] + mat[0,2];
if (diag1 == 0 || diag2 == 0)
{
return 1;
}
else if (diag1 == 3 || diag2 == 3)
{
return 1;
}else
return 0;
}
};