C++ c++;重载运算符堆栈溢出
我正在尝试重载C++ c++;重载运算符堆栈溢出,c++,C++,我正在尝试重载[]运算符。我收到一个未处理的异常错误。我正在使用向量实现一个矩阵类 (*此)返回您的矩阵对象。因此,(*this)[i]调用Matrix::operator[](i)。您的函数在没有任何终止条件的情况下调用自身,类似于: int foo() { return foo(); } 正如你所能想象的,它会很快崩溃 您可能希望从成员变量调用std::vector::operator[]。例如,如果类有一个名为vec的私有向量对象,则可能需要执行以下操作: double&
[]
运算符。我收到一个未处理的异常错误。我正在使用向量
实现一个矩阵类
(*此)
返回您的矩阵
对象。因此,(*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
,请更频繁地使用它 (*this)[i]
在功能上等同于(*this).operator[](i)
因此,它调用矩阵::运算符[](i)
。由于这发生在运算符函数本身中,因此函数无条件地递归调用自身。这意味着它将一直调用自己,直到内存耗尽,这在某些系统上会导致系统异常
假设
Matrix
有一个类型为std::vector
的成员,您可能需要使用该成员[i]
(它调用向量的操作符[]
),而不是(*this)[i]
解释这对您的:(*this)[i]
@FrédéricHamidi,不一定,1xN或Nx1矩阵仍然是矩阵。事实上,一个0x0矩阵也是有效的。一旦你读到解决方案,这个解决方案就很明显了。@FrédéricHamidi:这就像说向量应该有不止一个元素。而且,调试器可能会很容易地为你指出这个问题,通过回溯或让您逐步执行。
double& Matrix::operator[](int i)
{
return this->vec[i];
}