私は動的に割り当てられた文字列配列のすべての要素をコピーするコピー関数を記述しようとしています。実装についてC++は定義されたクラスのコンテキスト内で文字列配列をコピーします
#include <algorithm>
#include <string>
using std::string
using std::copy
class StringSet{
public:
StringSet(const StringSet&);
私が持っている:私のヘッダファイルに
私はそれが次のタイプ/戻り値を有するものとして定義されている
サイズは()の現在のサイズを返しStringSet::StringSet(const StringSet& arr)
{
auto a2 = StringSet(size());
copy(arr,arr + size(), a2);
}
文字列配列。私はまた、私は、クラスの一部としてオペレータ+を定義し、含まれていないため、オペレータのための制限=持っていないので=オペレータに
//prevent default copy assignment
StringSet& operator=(const StringSet&) = delete;
この制限は、私はに走ってきた 問題。ここ
明白な問題は、私はエラーを取得することです:
error: no match for 'operator+' (operand types are 'const StringSet' and 'int')
は、どのように私は+または=演算子を使用せずに、このエラーについては行くべき?
StringSetコンストラクタはサイズの動的に割り当てられた文字列配列を初期化する「能力」
StringSet::StringSet(int capacity)
: arrSize{capacity},
arr{make_unique<string[]>(capacity)}
{
}
コピーコンストラクタは、そのパラメータのディープコピーを作成することになっています。
私は、ソース+開始イテレータ、ソース+終了イテレータ、およびデスティネーション+開始イテレータをディープコピーするための引数としてstd :: copyを指定する必要があることを理解しています。
しかし、私はstd :: copyを使用しないでください。この場合、ディープコピーのforループの実装はどのように見えますか?
私はループのために書いてみましたが、私は[]
StringSet::StringSet(const StringSet& a)
{
auto a2 = StringSet(currentSize);
for (auto i=0; i < currentSize ; i++)
{
a2[i] = a[i];
}
}
エラー
error: no match for 'operator[]' (operand types are 'StringSet' and 'int')|
error: no match for 'operator[]' (operand types are 'const StringSet' and 'int')|
編集作業のためのコンパイラエラーを取得しています:私はしました
をオーバーロードされた演算子[]は次のようになります。
StringSet& operator[](const int);
そして、これはあなたが大体、+演算子をオーバーロードする必要が
error: passing 'const StringSet' as 'this' argument discards qualifiers [-fpermissive]|
error: use of deleted function 'StringSet& StringSet::operator=(const StringSet&)'|
'+'演算子をオーバーロードする必要があります。 – macroland
いいえ、 '+'演算子をオーバーロードする必要はありません。「動的に割り当てられた文字列配列」の 'StringSet'クラスで使用しているコンテナは、コピーコンストラクタで' arr.size() 'に初期化し、' arr'のコンテナの先頭に渡す必要がありますイテレータ、終了イテレータ、および 'this'のイテレータをstd :: copyに追加します。 –
あなたのコードが構文的に間違っているという事実を無視しても、あまりにも多くの情報を残してしまったので、人々は分かりやすく助けてくれます。サイズを受け入れるコンストラクタは何をしますか? 'copy()'は 'StringSet'に対して何をしますか? 'StringSet'にサイズを加えることでどのような結果が得られますか? – Peter