2014-07-04 16 views
18

मैं इस कदम के बारे में निर्माता पढ़ रहा था और मैं वी.एस. 2013 में इस कोड को किया डिफॉल्ट की निर्माता के लिए अमान्य प्रकार ...ले जाएँ निर्माता - वी.एस. 2013

class Student 
{ 
    unique_ptr<string> pName_; 

public: 
    Student(string name) : pName_(new string(name)) { } 
    ~Student() { } 
    Student(Student&&) = default; // Here I get the error. 
    void printStudentName(void) { cout << *pName_ << endl; } 
}; 

int main(void) 
{ 
    vector<Student> persons; 

    Student p = Student("Nishith"); 
    persons.push_back(std::move(p)); 
    persons.front().printStudentName(); 

    return 0; 
} 

मैं "Student::Student(Student&&): नहीं एक विशेष सदस्य समारोह है जो डिफ़ॉल्ट बनाया जा सकता "जब मैं यह संकलन करने की कोशिश की ...

किसी को भी मुझे बता सकते हैं कि मैं क्यों इस त्रुटि मिल रहा है?

+0

बेहतर भी सी ++ आधार टैग को जोड़ने। वैसे भी, आप स्ट्रिंग के लिए गतिशील आवंटन का उपयोग कर जानते हैं एक पूर्ण अपशिष्ट है? – Deduplicator

+0

आपका दृश्य स्टूडियो में था, है ना? – Deduplicator

+0

@Deduplicator: ठीक है, बिंदु लिया। हाँ, मैं दृश्य स्टूडियो 2013 – NJMR

उत्तर

31

क्योंकि VS2013 संकलक डिफॉल्ट की चाल कंस्ट्रक्टर्स समर्थन नहीं करता।

दृश्य स्टूडियो डिफॉल्ट की चाल कंस्ट्रक्टर्स या सी ++ 11 मानक जनादेश के रूप में कदम-असाइनमेंट ऑपरेटरों का समर्थन नहीं करता:

निम्नलिखित टिप्पणी from MSDN देखें। अधिक जानकारी के लिए, Support For C++11 Features (Modern C++) की चूक और नष्ट कर दिया गया कार्यों खंड देखें।

+3

मुझे लगता है कि उम्मीद का मतलब, मैं भी MSDN खोजा गया, लेकिन उचित लिंक नहीं मिला ... हाँ, लिंक के तहत चूक और हटाए गए कार्य अनुभाग है कि कहते हैं। उत्तर के लिए धन्यवाद। – NJMR

+1

यह उत्तर भ्रामक है। VS2013 _does_ डिफॉल्ट रूप से चालक को उत्पन्न करता है, हालांकि, कन्स्ट्रक्टर को स्थानांतरित नहीं किया जा सकता है। वे अलग-अलग चीजें हैं। –

+0

@MooingDuck धन्यवाद। मैंने एक उचित संपादन किया है। –

संबंधित मुद्दे