Operator =使用模板重载

时间:2014-09-08 02:03:54

标签: c++ overloading

说真的,我看过类似的例子,但我仍然不明白为什么它不起作用。我在重载=运算符时遇到了问题。

我收到以下两个错误:

  1. 错误C2955:' Matrix' :使用类模板需要模板参数列表
  2. 错误C2244:' Matrix :: operator =' :无法将函数定义与现有声明匹配
  3. 有人可以解释一下是什么问题吗?

    感谢所有

    //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;
    }
    

1 个答案:

答案 0 :(得分:4)

您需要在正在定义的函数的名称中使用模板参数。

template<typename T>
Matrix<T>& Matrix<T>::operator= (const Matrix<T>& rhs)
               // ^ here

您需要编写<T>,虽然它不会增加语言的表达性 - ::之前的参数不能是原始顺序中的整个类模板参数列表以外的任何参数并且没有任何修改。就是这样。