我之前提出了多维数组的两个问题,我真的很感激那些帮助我的人。现在我的代码中仍然存在一个未修复的错误,如下所示:
#include "Algorithm.h"
template<int size>
void strassen_matrix_multiplication(int (*A)[size], int (*B)[size], int (*C)[size]){
int n = size / 2;
int A11[n][n];
int P1[n][n];
int S1[n][n];
strassen_matrix_multiplication(S1, A11, P1);
}
现在我得到了编译错误,第5行说:
没有匹配调用函数'strassen_matrix_multiplication'
那我该怎么办呢?我已经修改了我的代码,但是徒劳无功。谢谢你的帮助。
答案 0 :(得分:2)
你的代码存在很多问题,其中一个是无限递归,因为你没有发现size
为1或0的基本情况。
我已经创建了一些模板特化来解决这种无限递归问题。
然后传递2D数组,您必须将它们作为2D数组传递,因为2D数组int[N][N]
不能转换为指针数组int*[]
。
以下是代码及其compiles,其中只有一些关于未使用参数的警告。
#include<iostream>
// Header file
#include <fstream>
#include <ostream>
#include <string>
template<int size> struct strassen
{
static void strassen_matrix_multiplication(int A[size][size], int B[size][size], int C[size][size]){
const int n = size / 2; //make this a compile time constant
int A11[n][n] = {};
int P1[n][n] = {};
int S1[n][n] = {};
strassen<n>::strassen_matrix_multiplication(S1, A11, P1);
}
};
template<> struct strassen<1> {
static void strassen_matrix_multiplication(int A[1][1], int B[1][1], int C[1][1]){}
};
template<> struct strassen<0> {
static void strassen_matrix_multiplication(){}
};
int main()
{
int arr[3][3];
strassen<3>::strassen_matrix_multiplication(arr, arr, arr);
}