我有班Matrix
和班Row
。 Matrix
具有一个指向成员类Row
的对象的指针作为成员变量。我为Matrix
和Row
重载了运算符[]。但是以某种方式,Row
中的重载运算符永远不会被调用,我不知道为什么不这样做。
示例代码: 矩阵
class Row
{
int* value;
int size;
public:
int& operator[](int i)
{
assert(i >= 0 && i < size);
return value[i];
}
};
class Matrix
{
private:
Row **mat; // Pointer to "Row"-Vector
int nrows, ncols; // Row- and Columnnumber
public:
Row& Matrix::operator[](int i){
assert(i >= 0 && i < nrows);
return *mat[i];
}
Row** getMat() {
return mat;
}
// Constructor
Matrix(int rows, int cols, int value);
};
matrix.cpp
#include "matrix.h"
Matrix::Matrix(int rows, int cols, int value) : nrows(rows), ncols(cols){
mat = new Row*[rows];
for(int i = 0; i < rows; i++) {
mat[i] = new Row(ncols);
for(int j = 0; j < ncols; j++){
// the operator-overload of Row[] isn't getting called and I don't get why not
mat[i][j] = value;
}
}
}
int main(){
Matrix m = new Matrix(2, 2, 4);
return 0;
答案 0 :(得分:1)
mat[i]
给您Row*
,您想调用Row::operator[]
,但是指向Row
的指针不会自动取消引用。因此,您必须手动取消引用它:(*mat[i])[j]
。
答案 1 :(得分:1)
所以我自己弄清楚了。
我试图从Matrix
到mat[][]
调用[]运算符,但是由于mat
是Row**
Row& Matrix::operator[](int i)
从未被调用。