Error del compilador C2558
'identificador' : no hay un constructor de copias disponible o éste se declaró como 'explicit'
Un constructor de copias inicializa un objeto a partir de otro objeto del mismo tipo. (Realiza una copia del objeto) El compilador genera un constructor de copias predeterminado si no se define ningún constructor.
Para corregir este error
El problema puede producirse cuando se intenta copiar una clase cuyo constructor de copias es
private
. En la mayoría de los casos, no debe copiarse una clase que tenga un constructor de copiasprivate
. Una técnica de programación común consiste en declarar un constructor de copiasprivate
para impedir el uso directo de una clase. La clase puede quedar inservible o requerir otra clase para poder funcionar correctamente.Si determina que es seguro utilizar una clase que tenga un constructor de copias
private
, derive una nueva clase a partir de la clase que tiene el constructorprivate
y proporcione un constructor de copiaspublic
oprotected
en la clase nueva. Utilice la clase derivada en lugar de la original.El problema puede producirse cuando se trata de copiar una clase cuyo constructor de copias es explícito. Declarar un constructor de copias como
explicit
impide que se pasen objetos de una clase a las funciones o que se devuelvan objetos de una clase desde las funciones. Para obtener más información sobre los constructores explícitos, consulte Conversiones de los tipos definidos por el usuario.El problema puede producirse cuando intenta copiar una instancia de la clase declarada como
const
utilizando un constructor de copias que no toma un parámetro de referenciaconst
. Declare el constructor de copias con una referencia de tipoconst
en lugar de con una referencia de otro tipo.