خطأ في المترجم C2280 "محاولة الإشارة إلى وظيفة محذوفة" في Visual Studio 2015
مترجم Visual Studio 2015، على عكس سابقه في 2013، يقوم تلقائيًا بإنشاء مُنشئ نسخة محذوفة للفئات التي تحدد مُنشئ النقل أو مشغل مهمة النقل. يتم تكليف هذا السلوك بواسطة معيار C لمنع النسخ غير المقصود في المواقف التي يكون فيها النقل مفضلاً.
في مقتطف التعليمات البرمجية الخاص بك، تحتوي الفئة A على مُنشئ النقل A(A &&)، والذي بدوره يعني نسخة محذوفة منشئ وفقا للمعيار. وبالتالي، فإن تعبير A(a) الجديد في الرئيسي يؤدي إلى الخطأ C2280.
لحل هذه المشكلة، يمكنك الإعلان بشكل صريح عن مُنشئ النسخة في A:
class A {
public:
A() {}
A(A &&) {}
A(const A&) = default; // Explicitly declare the copy constructor as defaulted
};
بدلاً من ذلك، إذا كنت تنوي حقًا تعطيل النسخ والسماح بالنقل فقط، فيمكنك الإعلان عن حذف مُنشئ النسخ وعامل تعيين النسخ:
class A {
public:
A() {}
A(A &&) {}
A(const A&) = delete;
A& operator=(const A&) = delete; // Delete copy assignment operator
};
تذكر، إذا اخترت تعطيل النسخ، فستحتاج أيضًا إلى الإعلان عن عامل مهمة النقل والمدمر للامتثال لقاعدة الخمسة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3