2014-07-04 7 views
18

stavo leggendo quanto riguarda costruttore movimento e ho fatto questo codice in VS 2013 ...Spostare Constructor - tipo non valido per il costruttore di default VS 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; 
} 

ho la "Student::Student(Student&&): non è una funzione membro speciale che può essere predefinito "quando ho provato a compilarlo ...

Qualcuno può spiegarmi perché sto ottenendo questo errore?

+0

Meglio anche aggiungere il tag di base C++. Ad ogni modo, sai che usare l'allocazione dinamica per la stringa è uno spreco completo? – Deduplicator

+0

Intendevi nello studio visivo, giusto? – Deduplicator

+0

@Deduplicator: Ok, punto preso. Sì, intendevo Visual Studio 2013. – NJMR

risposta

31

Poiché il compilatore VS2013 non supporta i costruttori di movimento predefiniti.

vedere la seguente nota from MSDN:

Visual Studio non supporta i costruttori spostare in default o operatori mossa-di attribuzione come C++ 11 mandati standard. Per ulteriori informazioni su , vedere la sezione Funzioni predefinite e cancellate di Support For C++11 Features (Modern C++).

+3

Mi aspettavo che, ho anche cercato MSDN, ma non ho trovato il link corretto ... Sì, la sezione Funzioni predefinite e cancellate sotto il link dice che. Grazie per la risposta. – NJMR

+1

Questa risposta è fuorviante. VS2013 _does_ genera i costruttori di mosse per impostazione predefinita, tuttavia, i costruttori di mosse non possono essere impostati come predefiniti. Sono cose diverse. –

+0

@MooingDuck Grazie. Ho fatto una modifica appropriata. –

Problemi correlati