Перегрузка операторов + - * в шаблонном классе
Пишу шаблонный класс матрицы, не могу понять как тут правильно реализовать перегрузку операторов
class Matrix
{
private:
T** data;
public:
Matrix(int rows, int columns);
~Matrix();
Matrix<T>& multiply(int x);
Matrix<T> add(Matrix<T> m);
Matrix<T> sub(Matrix<T> m);
Matrix<T> operator+(const Matrix<T> m) const;
Matrix<T> operator-(const Matrix<T> m) const;
Matrix<T> operator*(const Matrix<T> m) const;
Matrix<T>& operator=(const Matrix<T>& m) const;
};
template <class T> Matrix<T> operator+(const Matrix<T> &m1) const {
return *this->add(m1);
}
Компилятор выдает ошибку на строках реализации operator+
error C2270: +: модификаторы недопустимы для функций, не являющихся членами
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
У вас пара неприятностей:
Вы забыли указать при определении оператора, что это член класса:
template <class T>
Matrix<T> Matrix<T>::operator+(const Matrix<T> &m1) const {
return *this->add(m1);
}
Ну и вторая — у вас оператор в определении отличается от оператора в объявлении, в котором вы почему-то передаете не ссылку. Добавьте & в
Matrix<T> operator+(const Matrix<T>& m) const;