首页 > 解决方案 > 使用模板时出现错误:编译器错误 C2770:“模板”的显式模板或通用参数无效

问题描述

您可能会注意到我研究过 strassen 算法。我对 float 和 int 类型都使用了模板。但是有模板错误:编译器错误 C2784 '声明':无法从'类型'中推断出'类型'的模板参数请帮助我有什么问题,我该如何解决它

您可以在https://github.com/hyunseoki/matrix_multiplication/blob/master/matrix_multiplication/matrix_multiplication/Strassen.h中查看全部代码

template<typename T, size_t N>
void MatrixMult_Strassen(const T A[N][N], const T B[N][N], T C[N][N])
{   int i, j;
    const int mid = N / 2;

    if (N == 2) 
    {  
        MatrixMult_OpenMP<T, N>(A, B, C);
        return;
    }

    T A_11[mid][mid], A_12[mid][mid], A_21[mid][mid], A_22[mid][mid],
        B_11[mid][mid], B_12[mid][mid], B_21[mid][mid], B_22[mid][mid],
        C_11[mid][mid], C_12[mid][mid], C_21[mid][mid], C_22[mid][mid],
        M_1[mid][mid], M_2[mid][mid], M_3[mid][mid], M_4[mid][mid],
        M_5[mid][mid], M_6[mid][mid], M_7[mid][mid], temp_A[mid][mid], temp_B[mid][mid];

    //Matrix Division
    for (i = 0; i < mid; i++)
    {
        for (j =0; j < mid ; j++)
        {
            A_11[i][j] = A[i][j];
            A_12[i][j] = A[i][j + mid];
            A_21[i][j] = A[i + mid][j];
            A_22[i][j] = A[i + mid][j + mid];

            B_11[i][j] = B[i][j];
            B_12[i][j] = B[i][j + mid];
            B_21[i][j] = B[i + mid][j];
            B_22[i][j] = B[i + mid][j + mid];
        }
    }

    MatrixSum<T, mid>(A_11, A_22, temp_A);
    MatrixSum<T, mid>(B_11, B_22, temp_B);

    MatrixMult_Strassen<T, mid>(A_11, A_22, temp_A); // here error occurs

// below codes are ommited

}

标签: c++templates

解决方案


推荐阅读