独自の配列ラッパーを実装しようとしています。 arrayの要素のアドレスを返す演算子をオーバーロードしました。しかし、私がMainでArrayWrapperクラスを動的に割り当てると、動作していません。オーバーロード演算子[]を介してカスタム配列ラッパーの要素にアクセスする[]
なぜ機能しないのですか?変数arrがポインタなのではありますか?
私はこれらのエラーを取得:
説明リソースパスの場所の種類は 'のstd :: basic_ostream & &' Cviceniに 'のstd :: ostreamに{別名 のstd :: basic_ostream}' 左辺値をバインドすることはできません。 CPP/Cviceni/srcにライン25 C/C++ 問題
説明リソース・パスの場所「 (オペランドタイプです "< <は、オペレータのためのstd :: ostreamに{のstd別名を一致を入力しない::基本_ostream}」と 'ArrayWrapper')Cviceni.cpp/Cviceni/srcにライン25 C/C++の問題
の作業コード
ArrayWrapper arr(250);
try
{
for(int i = 0; i < arr.getSize(); i++)
{
arr[i] = i + 1;
cout << arr[i] << endl;
}
}
catch(std::range_error& e)
{
cout << e.what() << endl;
}
cout << "End..." << endl;
return 0;
}
に動作していないコード:
ArrayWrapper *arr = new ArrayWrapper(250);
try
{
for(int i = 0; i < arr->getSize(); i++)
{
arr[i] = i + 1;
cout << arr[i] << endl;
}
}
ArrayWrapperの実装:
class ArrayWrapper
{
private:
int size;
int *elements;
public:
ArrayWrapper(int n) : size(n), elements(new int[n])
{
for(int i = 0; i < size; i++)
elements[i] = 0;
};
~ArrayWrapper(){delete []elements;};
int& operator[](int i)
{
if(i >= size || i < 0)
{
throw range_error("Out of range");
}
return elements[i];
};
int getSize(){ return size;};
};
エラーメッセージを質問自体にコピーして貼り付けます。 –
'cout << arr [i] << endl;'を 'cout <<(* arr)[i] << endl;に変更するだけです。あなたは、そのケースのポインタをまったく使ってはいけません。 –
また、[3つのルール](https://stackoverflow.com/questions/4172722/what-is-the-rule-of-three); * "配列の要素のアドレスを返す演算子をオーバーロードしました。" * - いいえ、参照を返します。インデックスとサイズに 'size_t'を使用した場合、負の数をチェックする必要はありません。 – LogicStuff