[]
演算子をオーバーロードしようとしています。私は未処理の例外エラーが発生しています。私はvector<double>
を使って行列クラスを実装しています。オペレータスタックオーバーフローのC++オーバーロード
double& Matrix::operator[](int i)
{
return (*this)[i];
}
[]
演算子をオーバーロードしようとしています。私は未処理の例外エラーが発生しています。私はvector<double>
を使って行列クラスを実装しています。オペレータスタックオーバーフローのC++オーバーロード
double& Matrix::operator[](int i)
{
return (*this)[i];
}
(*this)
あなたMatrix
オブジェクトを返します。したがって、(*this)[i]
はMatrix::operator[](i)
となります。あなたの関数は次のように、任意の終了条件なしで自分自身を呼んでいる:かなり迅速にクラッシュしてしまいますあなたが想像できるように、
int foo() {
return foo();
}
。
メンバ変数からstd::vector::operator[]
を呼び出すことをお勧めします。 、
double& Matrix::operator[](int i)
{
return this->vec[i];
}
また、this->member
は速記が(*this).member
のために、より頻繁にそれを使用する:あなたのクラスは、vec
と呼ばれる民間のベクトルオブジェクトを持っている場合たとえば、あなたがやりたいかもしれません!
(*this)[i]
は、(*this).operator[](i)
と機能的に同等です。
したがって、Matrix::operator[](i)
を呼び出します。これは演算子関数自体の中で起こるので、関数は無条件に自身を再帰的に呼び出します。これは、メモリが使い果たされるまで、それ自体を呼び出すことを意味します。メモリが使い果たされると、システムによってはシステム例外が発生します。
Matrix
はタイプstd::vector<double>
のメンバーを持っていると仮定すると、あなたはおそらく、むしろ(*this)[i]
よりも(ベクトルのoperator[]
を呼び出す)that_member[i]
を使用する必要があります。
[ラバーダック](https://en.wikipedia.org/wiki/Rubber_duck_debugging)には、これがどうなるのか説明してください: '(* this)[i]' – juanchopanza
再帰のように見えます。 – Archie
行列に複数の次元を持たせるべきですか? –