void add(sparseMatrix<T> &b, sparseMatrix<T> &c); // c is output
sparseMatrix<T> operator+(sparseMatrix<T> &b);
マトリックス用語の単一リンクリストのarrayListで構成されるスパースマトリックスを作成しています(マトリックス用語には行、列、および値が含まれます)。+ 演算子のオーバーロードに問題があります。正常に動作する add メソッドがありますが、それを使用して + 演算子をオーバーロードしようとすると、次のエラーが発生します。
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;
}
エラーを与える main の行は c = a + b (a、b、c はすべて疎行列) です。a.add(b,c) を実行すると、すべて正常に動作することに注意してください。a = b などを実行するときに機能する = 演算子もオーバーロードしましたが、投稿したエラーメッセージでそれについて不平を言っているようです。何が問題なのか本当にわかりません。何か案は?