Delen via


Compilerfout C2558

'identifier': er is geen kopieerconstructor beschikbaar of de kopieerconstructor is 'expliciet' gedeclareerd

Opmerkingen

Een kopieerconstructor initieert een object op basis van een ander object van hetzelfde type. (Het maakt een kopie van het object.) De compiler genereert een standaardkopieconstructor als u geen constructors definieert.

Deze fout oplossen

  1. Het probleem kan optreden wanneer een poging wordt gedaan om een klasse te kopiëren waarvan de kopieerconstructor is private. In de meeste gevallen mag een klasse met een private kopieerconstructor niet worden gekopieerd. Een veelgebruikte programmeertechniek declareert een private kopieerconstructor om direct gebruik van een klasse te voorkomen. De klasse kan op zichzelf nutteloos zijn of een andere klasse vereisen om correct te kunnen werken.

    Als u vaststelt dat het veilig is om een klasse te gebruiken met een private kopieerconstructor, leidt u een nieuwe klasse af van de klasse met de private constructor en maakt u een public of protected kopieerconstructor beschikbaar in de nieuwe klasse. Gebruik de afgeleide klasse in plaats van het origineel.

  2. Het probleem kan optreden wanneer een poging wordt gedaan om een klasse te kopiëren waarvan de kopieerconstructor expliciet is. Het declareren van een kopieerconstructor als explicit voorkomt dat objecten van een klasse aan functies kunnen worden doorgegeven of geretourneerd. Zie User-Defined Typeconversies voor meer informatie over expliciete constructors.

  3. Het probleem kan optreden wanneer een poging wordt gedaan om een klasse-exemplaar te kopiëren dat is gedeclareerd const met behulp van een kopieerconstructor die geen referentieparameter gebruikt const . Declareer uw kopieerconstructor met een const typereferentie in plaats van een niet-const typereferentie.