Перегрузка операторов + - * в шаблонном классе

Пишу шаблонный класс матрицы, не могу понять как тут правильно реализовать перегрузку операторов

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;
→ Ссылка