Heim  >  Artikel  >  Backend-Entwicklung  >  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“?

DDD
DDDOriginal
2024-10-26 17:03:02847Durchsuche

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:

<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn