我正在尝试重载[]
运算符。我收到一个未处理的异常错误。我正在使用vector<double>
实现矩阵类。
double& Matrix::operator[](int i)
{
return (*this)[i];
}
答案 0 :(得分:2)
(*this)
会返回您的Matrix
个对象。因此,(*this)[i]
会调用Matrix::operator[](i)
。您的函数在没有任何终止条件的情况下调用自身,类似于:
int foo() {
return foo();
}
你可以想象,它会很快崩溃。
您可能希望从成员变量中调用std::vector::operator[]
。例如,如果您的类具有名为vec
的私有向量对象,则可能需要执行以下操作:
double& Matrix::operator[](int i)
{
return this->vec[i];
}
另外,this->member
是(*this).member
的简写,更经常使用!
答案 1 :(得分:1)
(*this)[i]
在功能上等同于(*this).operator[](i)
。
Matrix::operator[](i)
。由于这发生在运算符函数本身内,因此函数无条件地递归调用自身。这意味着它会一直调用自己直到内存耗尽,在某些系统上会导致系统异常。
假设Matrix
的成员类型为std::vector<double>
,您可能需要使用that_member[i]
(调用向量&#39; s operator[]
)而不是{{1} }}