Хорошо, я нашел несколько похожих сообщений в stackoverflow, но я не смог найти ни одной, относящейся к моей конкретной ситуации, и меня смутили некоторые из приведенных ответов. Итак, вот моя проблема:
У меня есть шаблон матрицы класса следующим образом:
template <typename T, size_t ROWS, size_t COLS>
class Matrix
{
public:
template<typename, size_t, size_t>
friend class Matrix;
Matrix( T init = T() )
: _matrix(ROWS, vector<T>(COLS, init))
{
/*for( int i = 0; i < ROWS; i++ )
{
_matrix[i] = new vector<T>( COLS, init );
}*/
}
Matrix<T, ROWS, COLS> & operator+=( const T & value )
{
for( vector<T>::size_type i = 0; i < this->_matrix.size(); i++ )
{
for( vector<T>::size_type j = 0; j < this->_matrix[i].size(); j++ )
{
this->_matrix[i][j] += value;
}
}
return *this;
}
private:
vector< vector<T> > _matrix;
};
и у меня есть следующий шаблон глобальной функции:
template<typename T, size_t ROWS, size_t COLS>
Matrix<T, ROWS, COLS> operator+( const Matrix<T, ROWS, COLS> & lhs,
const Matrix<T, ROWS, COLS> & rhs )
{
Matrix<T, ROWS, COLS> returnValue = lhs;
return returnValue += lhs;
}
Мне кажется, это правильно. Однако, когда я пытаюсь скомпилировать код, я получаю следующую ошибку (выдается из оператора + функция):
binary '+=' : no operator found which takes a right-hand operand of type 'const matrix::Matrix<T,ROWS,COLS>' (or there is no acceptable conversion)
Я не могу понять, что с этим делать. Любая помощь, если высоко ценится!