C-Compiler-Fehler C2280 „versucht, auf eine gelöschte Funktion zu verweisen“ in Visual Studio 2013 und 2015
In Visual Studio 2013 der folgende Code Snippet wird ohne Fehler kompiliert:
class A { public: A(){} A(A &&){} }; int main(int, char*) { A a; new A(a); return 0; }
Das gleiche Code-Snippet erzeugt jedoch einen Fehler in Visual Studio 2015:
1>------ Build started: Project: foo, Configuration: Debug Win32 ------ 1> foo.cpp 1>c:\dev\foo\foo.cpp(11): error C2280: 'A::A(const A &)': attempting to reference a deleted function 1> c:\dev\foo\foo.cpp(6): note: compiler has generated 'A::A' here ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Dies liegt daran, dass der C-Standard angibt, dass, wenn eine Klasse a deklariert Wenn Sie einen Kopierkonstruktor oder einen Verschiebungszuweisungsoperator verwenden, wird der implizit deklarierte Kopierkonstruktor als gelöscht definiert.
Um dieses Problem zu beheben, können Sie explizit einen Kopierkonstruktor und einen Kopierzuweisungsoperator bereitstellen:
class A { public: A(){} A(A &&){} A(const A&) = default; A& operator=(const A&) = default; };
Dies ermöglicht Ihnen das Kopieren, Konstruieren und Kopieren von Objekten der Klasse A.
Das obige ist der detaillierte Inhalt vonWarum tritt der C-Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen' in Visual Studio 2015, aber nicht in 2013 auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!