void add(sparseMatrix<T> &b, sparseMatrix<T> &c); // c is output
sparseMatrix<T> operator+(sparseMatrix<T> &b);
我正在创建一个稀疏矩阵,该矩阵由矩阵项的单链接列表的数组列表组成(矩阵项包含行,列和值)。我在重载+运算符时遇到问题。我有一个工作正常的添加方法,但是当我尝试使用它来重载+运算符时,我得到以下错误:
sparseMatrix.cpp: In function ‘int main()’:
sparseMatrix.cpp:268: error: no match for ‘operator=’ in ‘c = sparseMatrix<T>::operator+(sparseMatrix<T>&) [with T = int](((sparseMatrix<int>&)(& b)))’
sparseMatrix.cpp:174: note: candidates are: sparseMatrix<T>& sparseMatrix<T>::operator=(sparseMatrix<T>&) [with T = int]
make: *** [sparseMatrix] Error 1
以下是我对重载+运算符的实现:
sparseMatrix<T> sparseMatrix<T>::operator+(sparseMatrix<T> &b)
{
sparseMatrix<T> c;
add(b, c);
return c;
}
主要给出错误的行是c = a + b(a,b,c都是稀疏矩阵)。请注意,如果我执行a.add(b,c),一切正常。我也重载了=运算符,当我执行a = b等工作时,它似乎在我发布的错误消息中抱怨它。我真的不确定问题是什么。有什么想法吗?
答案 0 :(得分:7)
注意:候选人是:sparseMatrix&amp;稀疏矩阵::运算=(稀疏矩阵&安培;)
您的operator=
应该使用 const 参考。
如果引用不是const,则不能绑定到临时引用,因此赋值运算符不能用于a + b
创建的临时引用。
(对于operator+
也是如此,这里的参数也应该是const sparseMatrix<T> &
。另外这个方法应该声明为const,因为它不会修改它被调用的对象。)
答案 1 :(得分:0)
但我会让你的操作员更加标准。
class sparseMatrix
{
sparseMatrix(sparseMatrix const& copy);
sparseMatrix& operator=(sparseMatrix const& copy);
sparseMatrix& add(sparseMatrix const& value) // Add value to the current matrix
{
// Do Work.
return *this;
}
// Re-use add to implement the += operator.
sparseMatrix& operator+=(sparseMatrix const& rhs)
{
return add(rhs);
}
// Two things here:
//
// Implement the operator + in terms of the operator +=
//
// This basically means that you make a copy of one parameter then add the other
// value two it. Because + is symmetric it does not matter which you copy and which
// you add to the copy.
//
// So we pass the parameter by value this will provide an implicit copy
// generated by the compiler. This will also help the compiler with NRVO
// Then we just add (*this) to the copy of the rhs.
sparseMatrix operator+(sparseMatrix rhs)
{
return rhs += *this;
}
}