您的代码存在很多问题,其中之一是无限递归,因为您没有捕捉到size
1 或 0 的基本情况。
我创建了一些模板特化来解决这种无限递归。
然后传递你的二维数组,你必须将它们作为二维数组传递,因为二维数组int[N][N]
不能转换为指针数组int*[]
。
下面是代码,它编译时只有一些关于未使用参数的警告。
#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);
}