我正在编写一个2D数组类并尝试重载运算符[]:
typedef unsigned long long int dim;
template<typename N>
class Array2D {
private:
dim _n_rows;
dim _n_cols;
vector<vector<N>> M;
public:
dim n_rows() { return _n_rows; }
dim n_cols() { return _n_cols; }
Array2D(): _n_rows(0), _n_cols(0), M(0, vector<N>(0)){}
Array2D (const dim &r, const dim &c) : _n_rows(r), _n_cols(c), M(r, vector<N>(c)) {}
void set(const dim &i, const dim &j, const N &elem) { M[i][j] = elem; } // Works fine
vector<N>& operator[](int &index) { return M[index]; } // <- PROBLEM
};
我看到它的方式:operator []返回一些东西(向量),而东西又有重载的运算符[]。这就是为什么我认为
Array2D<int> L(10, 10);
L[3][3] = 10;
应该有用。
显然,编译器不这么认为,说'没有可行的重载operator []类型'Array2D'我做错了什么以及如何修复它?
PS。 XCode 7,如果重要的话。
答案 0 :(得分:4)
此功能:
vector<N>& operator[](int &index)
不能这样调用:
Array2D<int> L(10, 10);
L[3][3] = 10;
因为不能对文字进行非const引用。引用允许修改,修改3
会是什么意思?
你应该改用:
vector<N>& operator[](size_t index)