【发布时间】:2023-03-28 19:30:01
【问题描述】:
我尝试为两个 2x2 矩阵实现 strassens 算法,以创建递归矩阵乘法算法,但是实现无法编译,给我如下错误:
“strassen 没有在这个范围内声明” 和 “不合格的ID”
代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
int[][] strassen(int A[][2], int B[][2])
{
int s1 = B[0][1] - B[1][1];
int s2 = A[0][0] + A[0][1];
int s3 = A[1][0] + A[1][1];
int s4 = B[1][0] - B[0][0];
int s5 = A[0][0] + A[1][1];
int s6 = B[0][0] + B[1][1];
int s7 = A[0][1] - A[1][1];
int s8 = B[1][0] + B[1][1];
int s9 = A[0][0] - A[1][0];
int s10 = B[0][0] + B[0][1];
int p1 = A[0][0] * s1;
int p2 = s2 * B[1][1];
int p3 = s3 * B[0][0];
int p4 = A[1][1] * s4;
int p5 = s5 * s6;
int p6 = s7 * s8;
int p7 = s9 * s10;
int C[2][2];
C[0][0] = p5 + p4 - p2 + p6;
C[0][1] = p1 + p2;
C[1][0] = p3 + p4;
C[1][1] = p5 + p1 - p3 - p7;
return C[][];
}
int main()
{
int A[2][2] = {{1,3},{7,5}};
int B[2][2] = {{6,8},{4,2}};
int C[][2] = strassen(A,B);
cout<<C[0][0]<<endl<<C[0][1]<<endl<<C[1][0]<<endl<<C[1][1]<<endl;
return 0;
}
您能告诉我为什么会出现编译时错误吗?
我还需要知道如何为二维数组分配malloc 空间,因为一旦函数退出返回垃圾值,我当前的C 实现就会超出范围。
【问题讨论】:
-
您应该始终发布您的编译器/链接器错误逐字。
-
"返回 C[][];" - 你到底想达到什么目的?
-
忘掉
malloc这个东西吧!不要在 C++ 中使用它! -
问题是您创建了一个需要 A[][] 的函数,它是一个取消引用的指针,但尝试将 main 中的指针传递给它。我敢打赌你的编译器会告诉类似“candidate strassen(...) can't be used...”
-
由于
strassen的定义中有编译错误,所以它永远不会被定义。您需要按发生的顺序修复错误。
标签: c++ scope unqualified-name