我正在使用Strassen算法进行矩阵乘法。我试图超载'*'运算符但没有成功。我在C ++方面经验不足,我不知道如何修复它。
我在运行时没有出错,但Matrix参数 mysql_query($sql,$con)
有weard值(例如8215421532而不是4),因此结果为false。当我以更经典的方式尝试 mysqli_query($sql, $con)
方法(没有运算符)时,它可以正常工作。
Matrix.h
m
Matrix.cpp
strassen
的main.cpp
class Matrix
{
public:
int size;
int** mat;
Matrix(int n, int** values);
Matrix(int n, int min, int max);
virtual ~Matrix();
void print();
Matrix multiply(Matrix m);
Matrix& operator=(const Matrix&);
Matrix operator*(const Matrix&) const;
};
顺便说一句,如果您在'='运算符中看到错误,请不要犹豫告诉我。感谢您的帮助,在过去的两个小时内坚持了下来......
编辑: 矩阵构造函数代码(我不明白为什么它在这里是相关的,但我相信你)
Matrix Matrix::operator*(const Matrix& m) const {
if (m.size != size){
printf("La matrice n'a pas la bonne taille !\n");
return Matrix(0,NULL);
}
int **res = new int*[size];
for (int i = 0; i < size; i++){
res[i] = new int[size];
}
// Breakpoint here: variable m seems completely wrong
strassen(mat, m.mat, res, size);
return Matrix(size, res);
}
Matrix& Matrix::operator=(const Matrix& m){
for (int i = 0; i < m.size; i++)
for (int j = 0; j < m.size; j++)
mat[i][j] = m.mat[i][j];
return *this;
}
EDIT2:通过添加复制构造函数(三个规则)解决 - &gt;谢谢Igor Tandetnik(评论中)
Matrix m1 = Matrix(4, 0, 9);
Matrix m2 = Matrix(4, 0, 9);
printf("Matrice 1 :\n");
m1.print();
printf("Matrice 2 :\n");
m2.print();
printf("Multiplication Strassen :\n");
Matrix m3 = m1 * m2;
m3.print();
答案 0 :(得分:0)
通过添加复制构造函数(三个规则)解决 - &gt;谢谢Igor Tandetnik(评论中)
Matrix::Matrix(const Matrix& m){
size = m.size;
mat = new int*[m.size];
for (int i = 0; i < m.size; i++){
mat[i] = new int[m.size];
for (int j = 0; j < m.size; j++)
mat[i][j] = m.mat[i][j];
}
}