Sdílet prostřednictvím


Chyba kompilátoru C2558

Identifikátor: není k dispozici konstruktor kopie nebo je konstruktor kopie deklarován explicitně

Poznámky

Konstruktor kopie inicializuje objekt z jiného objektu stejného typu. (Vytvoří kopii objektu.) Kompilátor vygeneruje výchozí konstruktor kopírování, pokud nedefinujete žádné konstruktory.

Odstranění této chyby

  1. K problémem může dojít při pokusu o kopírování třídy, jejíž copy konstruktor je private. Ve většině případů by se neměla kopírovat třída, která má private konstruktor kopírování. Běžná programovací technika deklaruje private konstruktor kopírování, který brání přímému použití třídy. Tato třída může být sama o sobě nepoužitelná nebo ke správné funkci vyžaduje jinou třídu.

    Pokud zjistíte, že je bezpečné používat třídu, která má private konstruktor kopírování, odvodit novou třídu z třídy, která má private konstruktor, a vytvořit public nebo protected kopírovat konstruktor k dispozici v nové třídě. Použijte odvozenou třídu namísto původní.

  2. K problémem může dojít při pokusu o zkopírování třídy, jejíž konstruktor kopírování je explicitní. Deklarování konstruktoru kopírování jako explicit brání předávání a vracení objektů třídy do/z funkcí. Další informace o explicitních konstruktorech naleznete v tématu Převody typů definované uživatelem.

  3. K problému může dojít při pokusu o zkopírování instance třídy deklarované const pomocí konstruktoru kopírování, který nepřebírají const referenční parametr. Deklarujte konstruktor kopírování s odkazem const na typ místo odkazu na jiný typ než const.