Maison > développement back-end > C++ > Pourquoi l'erreur C2280 du compilateur C « tentative de référencement à une fonction supprimée » se produit-elle dans Visual Studio 2015 mais pas dans 2013 ?

Pourquoi l'erreur C2280 du compilateur C « tentative de référencement à une fonction supprimée » se produit-elle dans Visual Studio 2015 mais pas dans 2013 ?

Patricia Arquette
Libérer: 2024-10-27 12:14:02
original
849 Les gens l'ont consulté

Why Does C   Compiler Error C2280

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;
}
Copier après la connexion

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 ==========
Copier après la connexion

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;
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal