说真的,我看过类似的例子,但我仍然不明白为什么它不起作用。我在重载=运算符时遇到了问题。
我收到以下两个错误:
有人可以解释一下是什么问题吗?
感谢所有
//Matrix.hpp
template<typename T>
class Matrix
{
public:
Matrix(int numberRows, int numberColumns);
~Matrix();
void asgValue(T value, int row, int column);
T getValue(int row, int column);
Matrix<T>& operator= (const Matrix<T>& rhs);
friend Matrix<T>& operator+ (const Matrix<T>& lhs, const Matrix<T>& rhs);
private:
T **twoDarray;
int nbrRows;
int nbrColumns;
};
#include "Matrix.inl"
//Matrix.inl
//Matrix<T>& Matrix<T>::operator= (const Matrix<T>& rhs)
template<typename T>
Matrix<T>& Matrix::operator= (const Matrix<T>& rhs)
{
for (int i = 0; i < nbrRows; i++)
{
for (int j = 0; j < nbrColumns; j++)
{
twoDarray[i][j] = rhs.twoDarray[i][j];
}
}
return *this;
}
答案 0 :(得分:4)
您需要在正在定义的函数的名称中使用模板参数。
template<typename T>
Matrix<T>& Matrix<T>::operator= (const Matrix<T>& rhs)
// ^ here
您需要编写<T>
,虽然它不会增加语言的表达性 - ::
之前的参数不能是原始顺序中的整个类模板参数列表以外的任何参数并且没有任何修改。就是这样。