विजुअल स्टूडियो 2015 में कंपाइलर त्रुटि C2280 "एक हटाए गए फ़ंक्शन को संदर्भित करने का प्रयास"
विजुअल स्टूडियो 2015 कंपाइलर, अपने 2013 पूर्ववर्ती के विपरीत, मूव कंस्ट्रक्टर या मूव असाइनमेंट ऑपरेटर को परिभाषित करने वाली कक्षाओं के लिए स्वचालित रूप से एक डिलीट कॉपी कंस्ट्रक्टर उत्पन्न करता है। यह व्यवहार सी मानक द्वारा उन स्थितियों में आकस्मिक प्रतिलिपि को रोकने के लिए अनिवार्य है जहां स्थानांतरण को प्राथमिकता दी जाती है।
आपके कोड स्निपेट में, क्लास ए में एक मूव कंस्ट्रक्टर ए (ए &&) है, जो बदले में एक हटाई गई प्रतिलिपि का अर्थ देता है मानक के अनुसार कंस्ट्रक्टर। नतीजतन, मुख्य में नया 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