"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا أتلقى خطأ المحول البرمجي C2280 \"محاولة الإشارة إلى وظيفة محذوفة\" في Visual Studio 2015؟

لماذا أتلقى خطأ المحول البرمجي C2280 \"محاولة الإشارة إلى وظيفة محذوفة\" في Visual Studio 2015؟

تم النشر بتاريخ 2024-11-05
تصفح:502

Why Am I Getting Compiler Error C2280 \

خطأ في المترجم 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