„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum erhalte ich in Visual Studio 2015 den Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen“?

Warum erhalte ich in Visual Studio 2015 den Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen“?

Veröffentlicht am 05.11.2024
Durchsuche:112

Why Am I Getting Compiler Error C2280 \

Compilerfehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen“ in Visual Studio 2015

Der Compiler von Visual Studio 2015 ist im Gegensatz zu seinem Vorgänger von 2013 generiert automatisch einen gelöschten Kopierkonstruktor für Klassen, die einen Verschiebungskonstruktor oder Verschiebungszuweisungsoperator definieren. Dieses Verhalten wird vom C-Standard vorgeschrieben, um versehentliches Kopieren in Situationen zu verhindern, in denen das Verschieben bevorzugt wird.

In Ihrem Codeausschnitt verfügt die Klasse A über einen Verschiebungskonstruktor A(A &&), was wiederum eine gelöschte Kopie impliziert Konstruktor gemäß dem Standard. Folglich löst der neue A(a)-Ausdruck in main den Fehler C2280 aus.

Um dieses Problem zu beheben, können Sie den Kopierkonstruktor explizit in A deklarieren:

class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};

Alternativ, wenn Sie wirklich beabsichtigen, das Kopieren zu deaktivieren und nur das Verschieben zuzulassen, können Sie den Kopierkonstruktor und den Kopierzuweisungsoperator als gelöscht deklarieren:

class A {
public:
   A() {}
   A(A &&) {}
   A(const A&) = delete;
   A& operator=(const A&) = delete; // Delete copy assignment operator
};

Denken Sie daran: Wenn Sie das Kopieren deaktivieren möchten, müssen Sie auch einen Verschiebungszuweisungsoperator und einen Destruktor deklarieren, um der Fünferregel zu entsprechen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3