0

我正在涉足运算符重载的世界。我已经在我的 Vector2 类上进行运算符重载取得了一些成功,我现在正在研究一个 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 行):

矩阵.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.

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

真挚地,

杰西

4

1 回答 1

1

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

在 operator+ 的定义中:

 template<class T>
 Matrix<T> Matrix<T>::operator+(const Matrix<T>& A)
        ^
于 2012-09-16T11:42:10.707 回答