仍然在打击多维数组

时间:2012-12-20 11:34:01

标签: c++ multidimensional-array

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

#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'

那我该怎么办呢?我已经修改了我的代码,但是徒劳无功。谢谢你的帮助。

1 个答案:

答案 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);
}