2016-11-09 2 views
0

Я пытаюсь реализовать простой класс и связанный список. Пожалуйста, помогите мне с этим кодом, поскольку я получаю "list iterator not dereferencable" при запуске кода. Благодаряошибка при попытке класса со связанным списком C++

#include<iostream> 
#include<list> 
#include<string> 

using namespace std; 

class Car 
{ 
public: 
    void getType(string x) 
    { 
     type = x; 
    } 

    string showType() 
    { 
     return type; 
    } 

private: 
    string type; 
}; 

void main() 
{ 
    string p; 
    list<Car> c; 
    list<Car>::iterator curr = c.begin(); 

    cout << "Please key in anything you want: "; 
    getline(cin, p); 
    curr->getType(p); 

    cout << "The phrase you have typed is: " << curr->showType() << endl; 

} 
+1

нет ничего в списке так 'curr' не указывает на действительный' Car', вам нужно добавить автомобиль в свой список – vu1p3n0x

+0

сеттера с именем 'GetType()'? –

ответ

0

Написать следующим образом

cout << "Please key in anything you want: "; 
getline(cin, p); 

c.push_back(Car()); 

list<Car>::iterator curr = c.begin(); 

curr->getType(p); 

И это гораздо лучше переименовать функцию-член getType к setType. :)

Примите во внимание, что функция основной без параметров должны быть объявлены как

int main() 
^^^ 
0

Вы ничего не вставляли в свой list. Таким образом, итератор недействителен, он указывает на c.end() и разыменовывает это неопределенное поведение.

Вместо этого добавьте Car в ваш list, прежде чем вы получите итератор begin.

#include<iostream> 
#include<list> 
#include<string> 

using namespace std; 

class Car 
{ 
public: 
    void setType(const string& x) 
    { 
     type = x; 
    } 

    string showType() 
    { 
     return type; 
    } 

private: 
    string type; 
}; 

int main() 
{ 
    string p; 
    list<Car> c; 

    c.push_back(Car{}); 
    auto curr = c.begin(); 

    cout << "Please key in anything you want: "; 
    getline(cin, p); 
    curr->setType(p); 

    cout << "The phrase you have typed is: " << curr->showType() << endl; 
} 
Смежные вопросы