Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;重载运算符堆栈溢出_C++ - Fatal编程技术网

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];
}