我的代码中的以下行导致了一个神秘的段错误:
N = N + M;
其中N和M是Matrix类的对象:
class Matrix {
vector<int> A;
int m, n;
}
+操作员功能:
Matrix Matrix::operator+(const Matrix &other){
//matrices must be of same dimensions
//if not, return null Matrix
if (m != other.m || n != other.n)
return Matrix(0, 0);
Matrix T(m, n);
for (int i = 0; i < m*n; i++){
T.A.at(i) = this->A.at(i) + other.A.at(i);
}
return T;
}
当然N和M的大小相同(3x3)。
即使这样也出现了段错误:
M = N + M;
或
M = M + N;
或
Matrix P;
P = M + N;
但不是:
Matrix P = M + N;
可能是我的错误?我是C ++的新手。
编辑:这是=运算符:
Matrix Matrix::operator=(const Matrix &other){
A = other.A;
m = other.m, n = other.n;
}
编辑2 :我的构造函数可以提供帮助
Matrix::Matrix(int r, int c):
m(r), n(c), A(r*c)
{ }
答案 0 :(得分:0)
我认为问题在于您的赋值运算符:
Matrix Matrix::operator=(const Matrix &other){
A = other.A;
m = other.m, n = other.n;
}
您将其声明为返回Matrix
对象,但实际上并未返回任何内容。
解决方案(注意返回类型现在是参考):
Matrix &Matrix::operator=(const Matrix &other){
A = other.A;
m = other.m, n = other.n;
return *this;
}
请注意,默认的编译器生成的赋值无论如何都会做正确的事情。因此,更好的解决方案是使用那个(在类声明中):
Matrix &operator=(const Matrix &other) = default;