- Код не компилируется:
In file included from /home/zlt/sirius_tasks/MM/tlyavlin/cpp_homeworks/task7/main.cpp:6:
/home/zlt/sirius_tasks/MM/tlyavlin/cpp_homeworks/task7/gmres.hpp: In function 'Vector gmres(const sparse_trid&, const Vector&, const Vector&, int, double)':
/home/zlt/sirius_tasks/MM/tlyavlin/cpp_homeworks/task7/gmres.hpp:163:29: error: binding reference of type 'Vector&' to 'const Vector' discards qualifiers
163 | Vector r0 = b - A * x0;
| ^~
In file included from /home/zlt/sirius_tasks/MM/tlyavlin/cpp_homeworks/task7/main.cpp:5:
/home/zlt/sirius_tasks/MM/tlyavlin/cpp_homeworks/task7/Matrix.h:88:63: note: initializing argument 2 of 'Vector operator*(const sparse_trid&, Vector&)'
88 | friend Vector operator*(const sparse_trid& S, Vector& v);
- Функция
gmres
должна быть шаблонной, матрица должна передаваться как шаблон, используемая для вычислений точность также.
То есть выглядеть должно примерно так:
template <class UserMatrix, class DataType>
Vector gmres(const UserMatrix& A, const Vector<DataType>& b, const Vector<DataType>& x0, int max_iter, DataType tol)