我正在涉足运算符重载的世界。我已经在我的 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.
有人知道这里发生了什么吗?这可能真的很简单,我很愚蠢。我需要一些咖啡:|
真挚地,
杰西