Kompilatorfel C2558

"identifierare": ingen kopieringskonstruktor är tillgänglig eller kopieringskonstruktorn har deklarerats som "explicit"

Anmärkningar

En kopieringskonstruktor initierar ett objekt från ett annat objekt av samma typ. (Det gör en kopia av objektet.) Kompilatorn genererar en standardkopieringskonstruktor om du inte definierar några konstruktorer.

Åtgärda det här felet

  1. Problemet kan uppstå när ett försök görs att kopiera en klass vars kopieringskonstruktor är private. I de flesta fall bör en klass som har en private kopieringskonstruktor inte kopieras. En vanlig programmeringsteknik deklarerar en private kopieringskonstruktor för att förhindra direkt användning av en klass. Klassen kan vara värdelös på egen hand eller kräva en annan klass för att fungera korrekt.

    Om du bedömer att det är säkert att använda en klass som har en private kopieringskonstruktor, härleder du en ny klass från klassen med private konstruktorn och gör en public kopieringskonstruktor eller protected kopieringskonstruktor tillgänglig i den nya klassen. Använd den härledda klassen i stället för originalet.

  2. Problemet kan uppstå när ett försök görs att kopiera en klass vars kopieringskonstruktor är explicit. Att deklarera en kopieringskonstruktor som explicit förhindrar att objekt av en klass skickas till eller returneras från funktioner. Mer information om uttryckliga konstruktorer finns i Användardefinierade typkonverteringar.

  3. Problemet kan uppstå när ett försök görs att kopiera en klassinstans som deklarerats const med hjälp av en kopieringskonstruktor som inte tar en const referensparameter. Deklarera kopieringskonstruktorn med en const typreferens i stället för en referens av typen icke-const.