Erreur du compilateur C2558
'identificateur' : pas de constructeur de copie disponible ou le constructeur de copie est déclaré 'explicit'
Un constructeur de copie initialise un objet d'un autre objet de même type. (Il effectue une copie de l’objet.) Le compilateur génère un constructeur de copie par défaut si vous ne définissez aucun constructeur.
Pour corriger cette erreur
Le problème peut se produire lors d'une tentative de copie d'une classe dont le constructeur de copie est
private
. Le plus souvent, une classe qui a un constructeur de copieprivate
ne doit pas être copiée. Une technique de programmation classique déclare un constructeur de copieprivate
pour éviter l'utilisation directe d'une classe. La classe peut être inutile en tant que telle ou nécessiter une autre classe afin de fonctionner correctement.Si vous pensez que l'utilisation d'une classe qui a un constructeur de copie
private
ne présente aucun risque, dérivez une nouvelle classe à partir de la classe ayant le constructeurprivate
et mettez un constructeur de copiepublic
ouprotected
à la disposition de la nouvelle classe. Utilisez la classe dérivée à la place de l'original.Le problème peut se produire lors d'une tentative de copie d'une classe dont le constructeur de copie est explicite. La déclaration d'un constructeur de copie comme
explicit
évite le passage ou le retour d'objets d'une classe depuis ou vers les fonctions. Pour plus d’informations sur les constructeurs explicites, consultez Conversions de types définis par l’utilisateur.Le problème peut se produire lors d'une tentative de copie d'une instance de classe déclarée
const
à l'aide d'un constructeur de copie qui n'accepte pas de paramètre de référenceconst
. Déclarez votre constructeur de copie avec une référence de typeconst
au lieu d'une référence de type non const.