c++ - 使用模板时出现错误:编译器错误 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
}
解决方案
推荐阅读
- azure-active-directory - AzureAD 应用程序中定义的 appRole 未包含在“外部 Azure Active Directory”类型的来宾用户中
- r - 无法在 R 3.5.3 中安装 devtools 包
- java - 从 onAnimationEnd 在一个视图上播放动画序列
- android - Firebase Analytics 禁用受众国家跟踪
- javascript - 在声明链中使用 ,(逗号)而不是像 const、var 或 let 这样的适当变量定义是一种好的 JS 实践吗?
- cordova - Uncaught TypeError: Object(...) is not a function for Cordova plugin reference
- reactjs - React Formik 表单:允许用户选择 p 和 h 标签的文本区域
- r - 检索从向量中的起始元素添加固定数字后出现的元素
- ruby - 如何创建一个 .each 循环以根据用户输入从哈希中获取键和值?
- kubernetes - 创建和删除 Pod 的步骤