Compilerfehler C2558

Aktualisiert: November 2007

Fehlermeldung

'Bezeichner': Kein Kopierkonstruktor verfügbar, oder der Kopierkonstruktor ist als 'explicit' deklariert
'identifier' : no copy constructor available or copy constructor is declared 'explicit'

Durch einen Kopierkonstruktor wird ein Objekt von einem anderen Objekt desselben Typs initialisiert. (Es wird eine Kopie des Objekts angelegt.) Der Compiler generiert einen Standardkopierkonstruktor, wenn keine Konstruktoren definiert wurden.

Dieser Fehler kann eine der folgenden Ursachen haben:

  1. Es wurde versucht, eine Klasse zu kopieren, deren Kopierkonstruktor als private deklariert ist. In den meisten Fällen sollte eine Klasse mit einem als private deklarierten Kopierkonstruktor nicht kopiert werden. Mithilfe allgemeiner Programmierpraktiken wurde ein Kopierkonstruktor als private deklariert, um die direkte Verwendung einer Klasse zu verhindern. Die Klasse könnte entweder nutzlos sein oder eine andere Klasse benötigen, um korrekt zu funktionieren.

  2. Es wurde versucht, eine Klasse zu kopieren, deren Kopierkonstruktor als explicit deklariert ist. Das Deklarieren eines Kopierkonstruktors als explicit verhindert die Übergabe/Rückgabe von Objekten einer Klasse an/von Funktionen.

Beachten Sie die folgenden Vorschläge zur Problembehebung:

  • Wenn es Ihnen sicher erscheint, eine Klasse mit einem private-Kopierkonstruktor zu verwenden, leiten Sie von der Klasse eine neue Klasse mit einem private-Konstruktor ab und stellen in der neuen Klasse einen public-Kopierkonstruktor oder einen protected-Kopierkonstruktor bereit. Verwenden Sie die abgeleitete Klasse anstelle des Originals.

Weitere Informationen finden Sie unter Compilerfehler bei der Implementierung einer von "CObject" abgeleiteten Klasse.