Condividi tramite


Errore del compilatore C2558

'identificatore': nessun costruttore di copia disponibile o costruttore di copia dichiarato 'explicit'

Un costruttore di copia inizializza un oggetto da un altro oggetto dello stesso tipo, Crea una copia dell'oggetto. Se non si definiscono costruttori, il compilatore genera un costruttore di copia predefinito.

Per correggere l'errore

  1. Il problema può verificarsi quando si tenta di copiare una classe il cui costruttore di copia è private. Nella maggior parte dei casi, è preferibile non copiare una classe che dispone di un costruttore di copia private. Una tecnica di programmazione comune dichiara un costruttore di copia private per impedire l'uso diretto di una classe. La classe potrebbe non avere alcuna utilità in sé o richiedere un'altra classe per funzionare correttamente.

    Se si stabilisce che è sicuro utilizzare una classe che dispone di un costruttore di copia private, derivare una nuova classe dalla classe che dispone del costruttore private e rendere disponibile un costruttore di copia public o protected nella nuova classe. Usare la classe derivata al posto dell'originale.

  2. Il problema può verificarsi quando si tenta di copiare una classe il cui costruttore di copia è esplicito. La dichiarazione di un costruttore di copia come explicit impedisce il passaggio degli oggetti di una classe alle funzioni o la restituzione degli stessi. Per altre informazioni sui costruttori espliciti, vedere Conversioni di tipi definiti dall'utente.

  3. Il problema può verificarsi quando si tenta di copiare un'istanza di una classe dichiarata const usando un costruttore di copia che non accetta un parametro per riferimento const. Dichiarare il costruttore di copia con un riferimento di tipo const anziché un riferimento di tipo non const.