0

我使用函数模板来计算维度矩阵的行列式。

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 上工作!

4

0 回答 0