Erro do compilador C2558
'identificador': nenhum construtor de cópia disponível ou construtor de cópia declarado como 'explicit'
Um construtor de cópia inicializa um objeto a partir de outro objeto do mesmo tipo. (Faz uma cópia do objeto.) O compilador gerará um construtor de cópia padrão se você não definir nenhum construtor.
Para corrigir esse erro
O problema pode ocorrer quando é feita uma tentativa de copiar uma classe cujo construtor de cópia é
private
. Na maioria dos casos, uma classe que tem um construtor de cópiaprivate
não deve ser copiada. Uma técnica de programação comum declara um construtor de cópiaprivate
para evitar o uso direto de uma classe. A classe pode ser inútil isoladamente ou exigir outra classe para funcionar corretamente.Se você determinar que é seguro usar uma classe que tem um construtor de cópia
private
, derive uma nova classe da classe que tem o construtorprivate
e torne um construtor de cópiapublic
ou deprotected
disponível na nova classe. Use a classe derivada em vez da original.O problema pode ocorrer quando é feita uma tentativa de copiar uma classe cujo construtor de cópia é explícito. Declarar um construtor de cópia como
explicit
evita passar/retornar objetos de uma classe para/de funções. Para obter mais informações sobre construtores explícitos, confira Conversões de tipo definidas pelo usuário.O problema pode ocorrer quando é feita uma tentativa de copiar uma instância da classe declarada como
const
usando um construtor de cópia que não usa um parâmetro de referênciaconst
. Declare o construtor de cópia com uma referência de tipoconst
em vez de uma referência de tipo não const.