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
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 copiaprivate
. Una tecnica di programmazione comune dichiara un costruttore di copiaprivate
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 costruttoreprivate
e rendere disponibile un costruttore di copiapublic
oprotected
nella nuova classe. Usare la classe derivata al posto dell'originale.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.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 riferimentoconst
. Dichiarare il costruttore di copia con un riferimento di tipoconst
anziché un riferimento di tipo non const.