2014-07-04 10 views
18

byłem czytania konstruktora dotyczące przemieszczania się i zrobiłem ten kod w VS 2013 ...Move Konstruktor - nieprawidłowy typ dla niewykonaniem konstruktora 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; 
} 

otrzymuję "Student::Student(Student&&): nie jest to specjalna funkcja, która członek może być domyślnie "kiedy próbowałem skompilować ...

Czy ktoś może mi wyjaśnić, dlaczego otrzymuję ten błąd?

+0

Lepiej dodać także znacznik bazowy C++. W każdym razie, wiesz, że używanie alokacji dynamicznej dla ciągu znaków jest całkowitym marnotrawstwem? – Deduplicator

+0

Masz na myśli w studio wizualnym, prawda? – Deduplicator

+0

@Deduplicator: OK, punkt wzięty. Tak, miałem na myśli Visual Studio 2013. – NJMR

Odpowiedz

31

Ponieważ kompilator VS2013 nie obsługuje domyślnych konstruktorów ruchu.

Zobacz dopiskiem from MSDN:

Visual Studio nie obsługuje niespłaconych konstruktorów przenieść lub operatorów move-przypisania jako C++ 11 standardowych mandatów. Więcej informacji na temat znajduje się w sekcji Funkcje domyślne i Usunięte w Support For C++11 Features (Modern C++).

+3

Spodziewałem się tego, ja również szukałem MSDN, ale nie znalazłem odpowiedniego łącza ... Tak, sekcja Defaulted and Deleted Functions pod linkiem mówi, że. Dziękuję za odpowiedź. – NJMR

+1

Ta odpowiedź jest myląca. VS2013 _daje_ generuje domyślnie konstruktory ruchów, jednak konstruktory ruchu nie mogą być domyślne. Są to różne rzeczy. –

+0

@MooingDuck Dzięki. Dokonałem odpowiedniej edycji. –

Powiązane problemy