私は下付き演算子をオーバーライドしようとしているMapクラスの例があります。クラスのユーザーがマップを読み書きできるようにする。 ["a"]マップが読み込まれ、Map ["a"] = "something"がクラスの書き込みになります。しかし、私は物事の代入演算子側を使用する方法を理解できず、渡された値がそれを置き換えることを許可しません。私はそれだけで「セグメンテーションフォールト」ここ添字演算子のオーバーロード
読み込み、新しい値を代入しようとする今、私がこれまで持っているものです。
VALUE_TYPE& Map::operator[](KEY_TYPE a){
cout << "hmm" << endl;
}
Map& Map::operator=(const Map &rhs){
//cout << "operator = " << endl;
}
今、私は、コードのいずれかを持っていません...彼らはうまくいっていることを知りたかっただけです。私はセグメンテーションフォールトを取得します
Map["a"] = "hey";
ような何かをする場合、私は把握することができないよう何
です。私は、特定のキーに新しい値を代入したいときに代入演算子=が呼び出されると仮定していました。私は何か間違っているのですか?
ちなみに、VALUE_TYPEとKEY_TYPEは文字列として定義されているだけで、各キーには値が関連付けられています。
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
まず見てください。演算子は、 'マップ'の権利ではなく 'タイプ'を取っていなければなりませんか? 'Map [a]'はマップ内の要素を返すためです。地図ではありません。地図の地図でない限り。 –
operator =は、単一の要素ではなく、マップ全体を割り当てます。 –