次の方法で共有


コンパイラ エラー C2558

'identifier' : プライベート メンバー、プロテクト メンバーの初期化にはコンストラクターが必要です。

コピー コンストラクターは、あるオブジェクトを同じ型の別のオブジェクトの値で初期化します。 (オブジェクトのコピーを作成します)。コンストラクターを定義しない場合、コンパイラによって既定のコピー コンストラクターが生成されます。

このエラーを修復するには

  1. この問題は、コピー コンストラクターが private であるクラスをコピーしようとしたときに発生する場合があります。 ほとんどの場合、private コピー コンストラクターを持つクラスはコピーできません。 一般的なプログラミング技法では、private コピー コンストラクターを宣言してクラスを直接使用しないようにします。 このクラスは、単独では役に立たない、つまり正常に機能させるには別のクラスを必要とする場合があります。

    private コピー コンストラクターを持つクラスを使用しても安全であると判断したら、private コンストラクターを持つこのクラスから新しいクラスを派生させ、public コピー コンストラクターまたは protected コピー コンストラクターをその新しいクラスで使用できるようにします。 この派生クラスを元のクラスがあった位置で使用するとエラーを解決できます。

  2. この問題は、コピー コンストラクターが明示的であるクラスをコピーしようとしたときに発生する場合があります。 コピー コンストラクターを explicit として宣言すると、関数との間でクラス オブジェクトの受け渡しができなくなります。 明示的なコンストラクターの詳細については、「ユーザー定義型の変換」を参照してください。

  3. この問題は、const 参照パラメーターを受け取らないコピー コンストラクターを使用して、const と宣言されたクラス インスタンスをコピーしようとしたときに発生する場合があります。 non-const 型参照ではなく、const 型参照を使用して、コピー コンストラクターを宣言します。