E2305 ベクタをコピーする 'class::class' ('class'&) が見つからない または ベクタをコピーする 'class'::operator=('class'&) が見つからない (C++)

提供: RAD Studio
移動先: 案内検索

コンパイラのエラーと警告(C++):インデックス への移動

C++ クラス 'class1' にクラス 'class2' のベクタ(配列)が含まれ,'class1' 型のオブジェクトを 'class 1' 型の別のオブジェクトから構築する場合は,次のコンストラクタを使用する必要があります。



 class2::class2(class2&)



これで,ベクタの要素を構築できます。

このコンストラクタはコピーコンストラクタと呼ばれ,パラメータを 1 つだけ(そのクラスへの参照)受け取ります。

通常は,コンパイラがコピーコンストラクタを自動的に提供します。

ただし,クラス 'class2' のコンストラクタを定義し,そのコンストラクタに 'class2&' 型のパラメータと,デフォルト値を持つほかのパラメータがある場合,コピーコンストラクタはなく,コンパイラも作成できません。

これは,両者を区別できないためです。



 class2::class2(class2&)
 class2::class2(class2&, int = 1)



一部のパラメータはデフォルト値を持たないように,このコンストラクタを再定義する必要があります。

これで,参照コンストラクタを定義するか,コンパイラに作成を任せることができます。

Cannot find class::operator= ...

C++ クラス 'class1' にクラス 'class2' のベクタ(配列)が含まれ,'class1' 型のクラスをコピーする場合は,次の代入演算子を使用する必要があります。



 class2::class2(class2&)



これで,ベクタの要素をコピーできます。

通常は,コンパイラがこの演算子を自動的に提供します。

ただし,'class2&' 型のパラメータを受け取らない operator= をクラス 'class2' に定義した場合,コンパイラはこれを自動的に提供しません。自分で指定する必要があります。