Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 那里';使用模板时出错:编译器错误C2770:无效的显式模板或泛型参数';模板&x27;_C++_Templates - Fatal编程技术网

C++ 那里';使用模板时出错:编译器错误C2770:无效的显式模板或泛型参数';模板&x27;

C++ 那里';使用模板时出错:编译器错误C2770:无效的显式模板或泛型参数';模板&x27;,c++,templates,C++,Templates,你可能会注意到我研究过strassen算法。 我对float和int类型都使用了模板。 但出现了模板错误:编译器错误C2784“声明”:无法从“类型”推断“类型”的模板参数 请帮助我什么地方出了问题,我怎样才能解决它 您可以在中看到整个代码 模板 无效矩阵结果(常数A[N][N],常数B[N][N],常数C[N][N]) {int i,j; 常数int mid=N/2; 如果(N==2) { 矩阵结果OpenMP(A、B、C); 返回; } 十一[中][中],十二[中][中],二十一[中]

你可能会注意到我研究过strassen算法。 我对float和int类型都使用了模板。 但出现了模板错误:编译器错误C2784“声明”:无法从“类型”推断“类型”的模板参数 请帮助我什么地方出了问题,我怎样才能解决它

您可以在中看到整个代码

模板
无效矩阵结果(常数A[N][N],常数B[N][N],常数C[N][N])
{int i,j;
常数int mid=N/2;
如果(N==2)
{  
矩阵结果OpenMP(A、B、C);
返回;
}
十一[中][中],十二[中][中],二十一[中][中],二十二[中][中],,
布尤11[中][中],布尤12[中][中],布尤21[中][中],布尤22[中][中],,
中大11[中][中],中大12[中][中],中大21[中][中],中大22[中][中],,
M_1[mid][mid]、M_2[mid][mid]、M_3[mid][mid]、M_4[mid][mid],
五年级[中][中]、六年级[中][中]、七年级[中][中]、临时A年级[中][中]、临时B年级[中][中];
//矩阵除法
对于(i=0;i
我真的不明白这行代码是如何产生错误消息的。请添加一个可编译的示例。谢谢回复。你可以编译整个解决方案。。它只包含2个文件main.cpp和strassen.h main cpp:headfile:它会为我生成不同的错误消息。它尝试用
N=0
实例化函数。我认为如果constexpr(N==2),您可能需要使用
,并将返回部分放在else分支中的return后面。我真的不明白这行代码是如何产生错误消息的。请添加一个可编译的示例。谢谢回复。你可以编译整个解决方案。。它只包含2个文件main.cpp和strassen.h main cpp:headfile:它会为我生成不同的错误消息。它尝试用
N=0
实例化函数。我认为如果constexpr(N==2),您可能需要使用
,并将部分放在else分支中的return后面。
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

}