Heim >Backend-Entwicklung >C++ >Warum erhalte ich in Visual Studio 2015 den Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen'?
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:
<code class="cpp">class A { public: A() {} A(A &&) {} A(const A&) = default; // Explicitly declare the copy constructor as defaulted };</code>
Alternativ, wenn Sie es wirklich möchten Wenn Sie beabsichtigen, das Kopieren zu deaktivieren und nur das Verschieben zuzulassen, können Sie den Kopierkonstruktor und den Kopierzuweisungsoperator als gelöscht deklarieren:
<code class="cpp">class A { public: A() {} A(A &&) {} A(const A&) = delete; A& operator=(const A&) = delete; // Delete copy assignment operator };</code>
Denken Sie daran: Wenn Sie das Kopieren deaktivieren möchten, müssen Sie auch einen Verschiebungszuweisungsoperator deklarieren und Destruktor, um die Fünferregel einzuhalten.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in Visual Studio 2015 den Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!