Heim  >  Artikel  >  Backend-Entwicklung  >  Warum tritt der C-Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen“ in Visual Studio 2015, aber nicht in 2013 auf?

Warum tritt der C-Compiler-Fehler C2280 „Versuch, auf eine gelöschte Funktion zu verweisen“ in Visual Studio 2015, aber nicht in 2013 auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 12:14:02743Durchsuche

Why Does C   Compiler Error C2280

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!

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