Я использовал шаблон функции, чтобы вычислить определитель матрицы размера n.
template <int dimension>
double get_cofactor(double A[dimension][dimension],
double temp[dimension-1][dimension-1],
int p, int q)
{
int i = 0, j = 0;
for (int row = 0; row < dimension; row++)
{
for (int col = 0; col < dimension; col++)
{
if (row != p && col != q)
{
temp[i][j++] = A[row][col];
if (j == dimension - 1)
{
j = 0;
i++;
}
}
}
}
}
template <int dimension>
double determinant(double A[dimension][dimension])
{
double ret = 0.0;
double temp[dimension-1][dimension-1] ={ 0.0 };
int sign = 1;
for (int i=0; i<dimension; ++i) {
get_cofactor<dimension>(A, temp, 0, i);
ret += sign * A[0][i] * determinant<dimension-1>(temp);
sign = -sign;
} //end of for
return ret;
}
Я использую следующую специализацию шаблона функции для завершения рекурсии.
template <>
double determinant<1>(double A[][1])
{
return A[0][0];
}
Но специализация не может пройти компиляцию. Произошла одна ошибка.
ошибка C2912: явная специализация ‘двойной определитель<1> (double [] [1]) ‘не является специализацией шаблона функции
В чем проблема? Как я могу прекратить это?
2017/6/23
Я изменил код, он работает в GCC!
Задача ещё не решена.
Других решений пока нет …