Erreur du compilateur C C2280 "tentative de référencer une fonction supprimée" dans Visual Studio 2013 et 2015
Dans Visual Studio 2013, le code suivant L'extrait de code se compile sans erreur :
class A { public: A(){} A(A &&){} }; int main(int, char*) { A a; new A(a); return 0; }
Cependant, le même extrait de code génère une erreur dans 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 ==========
En effet, le standard C précise que si une classe déclare un constructeur de déplacement ou opérateur d'affectation de déplacement, le constructeur de copie déclaré implicitement est défini comme supprimé.
Pour résoudre ce problème, vous pouvez fournir explicitement un constructeur de copie et un opérateur d'affectation de copie :
class A { public: A(){} A(A &&){} A(const A&) = default; A& operator=(const A&) = default; };
Ceci vous permettra de copier-construire et copier-attribuer des objets de classe A.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!