Я хочу перегрузить операторы + и = для моего класса матрицы. Мой код:Ошибки при перегрузке + и =
friend float* operator+(const Matrix& m)
{
for(int i = 0; i < (int)(m._n*m._n); i++)
_m[i] = _m[i] + m._m[i];
};
friend Matrix& operator=(const Matrix& m)
{
std::swap(_m, m._m);
return *this;
};
с _m
данных и _n
размером квадратных матриц. Но мой компилятор дает мне следующие ошибки:
main.cpp:161:45: error: ‘Matrix& operator=(const Matrix&)’ must be a nonstatic member function
main.cpp: In function ‘float* operator+(const Matrix&)’:
main.cpp:192:12: error: invalid use of non-static data member ‘Matrix::_m’
main.cpp:158:13: error: from this location
main.cpp:192:12: error: invalid use of non-static data member ‘Matrix::_m’
main.cpp:158:21: error: from this location
main.cpp:159:5: warning: no return statement in function returning non-void [-Wreturn-type]
Для первой ошибки, я прочитал, что он должен быть непосредственно в классе, но даже когда я положил его там, я все еще получаю ошибку. Для второй ошибки я понятия не имею, как это решить. Что я делаю не так?
Спасибо!
Как 'всплывают *' имеет смысл в результате сложения двух матриц? – BartoszKP
Если вы поместите эти функции в класс как члены, вы не сможете объявить их как «друг». Это делает функции нечленов функциями. –
Вы не можете поменять ссылку на 'const'. Вам нужно пройти по значению или сделать локальную копию. – juanchopanza