-5

我之前提出了两个关于多维数组的问题,我非常感谢那些帮助过我的人。现在我的代码中仍然存在一个未修复的错误,如下所示:

#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”的匹配调用

那么我该如何解决呢?我已经多次修改了我的代码,但徒劳无功。谢谢你的帮助。

4

1 回答 1

2

您的代码存在很多问题,其中之一是无限递归,因为您没有捕捉到size1 或 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);
}
于 2012-12-20T11:46:58.413 回答