好的,我在 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;
}
对我来说,这似乎是对的。但是,当我尝试编译代码时,出现以下错误(由 operator+ 函数引发):
binary '+=' : no operator found which takes a right-hand operand of type 'const matrix::Matrix<T,ROWS,COLS>' (or there is no acceptable conversion)
我不知道该怎么做。如果非常感谢任何帮助!
最佳答案
你的 operator+=
这里:
Matrix<T, ROWS, COLS> & operator+=( const T & value )
定义了一个添加 T
的方法(标量)到 Matrix<T, ROWS, COLS>
.
这个声明:
return returnValue += lhs;
尝试添加 Matrix<T, ROWS, COLS>
(矩阵,类型 lhs
)到 Matrix<T, ROWS, COLS>
.
所以编译器说你没有定义那个操作是完全正确的。你有一个 operator+=
将标量添加到矩阵,但不是 operator+=
将矩阵添加到矩阵。
关于c++全局运算符不能很好地与模板类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549856/