类模板,矩阵和加法

时间:2012-09-16 11:39:00

标签: c++ templates overloading operator-keyword

我正在涉足运营商重载的世界。我已经在我的Vector2类上做运算符重载方面取得了一些成功,我现在正在研究一个Matrix类,并且我正在尝试编写一个将两个矩阵一起添加到一个新矩阵中的函数。我虽然绊倒了这个错误,谷歌搜索它并没有让我更进一步,因为人们似乎有一个完全不同的问题,但同样的问题。

这是类声明:

Matrix.h

#ifndef __MAGE2D_MATRIX_H
#define __MAGE2D_MATRIX_H

namespace Mage {
    template<class T>
    class Matrix {
    public:
        Matrix();
        Matrix(unsigned int, unsigned int);
        ~Matrix();

        unsigned int getColumns();
        unsigned int getRows();

        T&       operator[](unsigned int);
        const T& operator[](unsigned int) const;
        Matrix operator+(const Matrix&);
        Matrix operator-(const Matrix&);

    private:
        unsigned int rows;
        unsigned int columns;
        T*           matrix;
    };
}

#endif // __MAGE2D_MATRIX_H

这是违规函数无效(这些是matrix.cpp的第31到45行):

matrix.cpp

template<class T>
Matrix Matrix<T>::operator+(const Matrix<T>& A) {
    if ((rows == A.getRows()) && (columns == A.getColumns())) {
        Matrix<T> B = Matrix<T>(rows, columns);
        for (unsigned int i = 0; i <= rows; ++i) {
            for (unsigned int j = 0; i <= columns; ++i) {
                B[i][j] = matrix[i][j] + A[i][j];
            }
        }

        return B;
    }

    return NULL;
}

最后但并非最不重要的是,这是我得到的两个错误。

1>ClCompile:
1>  matrix.cpp
1>src\matrix.cpp(32): error C2955: 'Mage::Matrix' : use of class template requires template argument list
1>          C:\Users\Jesse\documents\visual studio 2010\Projects\Mage2D\Mage2D\include\Mage2D/Math/Matrix.h(6) : see declaration of 'Mage::Matrix'
1>src\matrix.cpp(47): error C2244: 'Mage::Matrix<T>::operator +' : unable to match function definition to an existing declaration
1>          C:\Users\Jesse\documents\visual studio 2010\Projects\Mage2D\Mage2D\include\Mage2D/Math/Matrix.h(17) : see declaration of 'Mage::Matrix<T>::operator +'
1>          definition
1>          'Mage::Matrix Mage::Matrix<T>::operator +(const Mage::Matrix<T> &)'
1>          existing declarations
1>          'Mage::Matrix<T> Mage::Matrix<T>::operator +(const Mage::Matrix<T> &)'
1>
1>Build FAILED.

任何人都知道这里发生了什么?这可能很简单,我很愚蠢。我需要一些咖啡:|

此致

杰西

1 个答案:

答案 0 :(得分:1)

  

'Mage :: Matrix':使用类模板需要模板参数列表

在operator +的定义中:

 template<class T>
 Matrix<T> Matrix<T>::operator+(const Matrix<T>& A)
        ^