-5

私は以前に多次元配列に関する 2 つの問題を提起しました。私を助けてくれた人たちに本当に感謝しています。現在、以下に示すような私のコードにはまだ修正されていないバグがあります。

#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

sizeコードにはかなりの問題がありました。そのうちの 1 つは、 1 または 0である基本ケースをキャッチできなかったため、無限再帰でした。

この無限再帰を解決するために、いくつかのテンプレートの特殊化を作成しました。

次に、2D 配列を渡す場合、2D 配列int[N][N]はポインターの配列に変換できないため、それらを 2D 配列として渡す必要があります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 に答える