我在c ++中实现了一个模板Matrix类,我面临运算符()重载的错误。这是代码:
Matrix.hpp:
template <typename T>
class Matrix {
std::vector<T>* _data;
int _sx;
int _sy;
public:
// CTOR - DTOR
Matrix(int sx, int sy);
Matrix(Matrix<T> const &other);
~Matrix();
// Operator Overloads
Matrix<T>& operator+=(Matrix<T> const &other);
Matrix<T>& operator-=(Matrix<T> const &other);
Matrix<T>& operator*=(Matrix<T> const &other);
Matrix<T>& operator/=(Matrix<T> const &other);
Matrix<T>& operator=(Matrix<T> const &other);
T& operator()(int x, int y);
// Member Functions
void display() const;
int getSx() const;
int getSy() const;
private: // Private Member functions
bool _rangeCheck(int x, int y) const;
};
#include "../srcs/Matrix.inl"
Matrix.inl(问题部分)
template <class T>
T& Matrix<T>::operator()(int x, int y) {
if (this->_rangeCheck(x, y)) {
return (this->_data[(y * this->_sx) + x]);
}
throw std::out_of_range("Bad argument");
}
编译时我在执行myMatrix(1, 0) = 1
时收到此错误:
./include/../srcs/Matrix.inl:65:9: error: non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'std::vector<int>'
return (this->_data[(y * this->_sx) + x]);
知道我做错了什么?
答案 0 :(得分:3)
(this->_data[(y * this->_sx) + x]);
您的data
是指针,因此在operator[]
上使用data
作为std::vector<T>
数组访问(*(this->_data)[(y * this->_sx) + x]);
。替换为:
std::vector
您可以考虑在此处避开指针,或继承template <typename T>
class Matrix
{
std::vector<T> _data;
//...
};
template <typename T>
class Matrix : private std::vector<T>
{
//...
};
:
{{1}}
修改强>
正如molbdnilo的评论所指出的那样,不推荐继承标准容器。
请参阅this question了解原因。