私は、オーバーロードされた操作を使用することを学んでいるC++の初心者です。私はこのコードを持っている私のメインプログラムでは:私のヘッダーでエラー:読み取り専用ロケーションの割り当て 'arr2.IntArray :: operator [](1)' arr2 [1] = 24;
IntArray arr2(3)
arr2[1] = 24;
を、私はこのコード私の.cppファイルで
class IntArray {
char *elt;
int size
public:
const int& operator[] (int i);
を持って、私はこのコンストラクタを持っている:
/* one-integer constructor */
IntArray::IntArray(int sz) {
elt = new char[sz];
for (int i = 0; i<sz; i++)
elt[i] = 0;
size = sz;
}
と、このインデックス演算子
/* Index operator */
const int& IntArray::operator[] (int i) {
if (i < 0) {
cout << "warning: value out of bounds" <<endl;
return elt[0];
}
else if (i > size) {
cout << "warning: value out of bounds" <<endl;
return elt[size];
}
else
return elt[i];
}
このエラーが発生しましたまたは配列のインデックスされた位置に値24を代入しようとしたとき
error: assignment of read-only location ‘arr2.IntArray::operator’ arr2[1] = 24;
何が間違っていますか?
確かに、このエラーが発生します:エラー:int型のrvalueから型 'int&'の非const参照の無効な初期化 return elt [0]; – flowpoint
@flowpoint 'elt'とは何ですか?質問に追加してください。 – Barry
更新された記事を参照してください – flowpoint