2015-04-24 2 views
0

Я не понимаю, в чем проблема с этой функцией, я делал что-то очень похожее на это в прошлом, и он работал нормально, но теперь, когда я пытаюсь запустить эту функцию, я получаю ошибкаНевозможно разыменовать итераторы векторов

"Unable to dereference vector iterator" 

Он поставляется на линии curr->setName(new_name);, которая имеет смысл, так как это, где его быть разыменовываются. Также просто чтобы быть понятным, все функции и классы, используемые в этом методе, работают отлично сами по себе, я просто не вставляю их ради пространства.

void System::modify(PC a){ 
    char x; 
    curr = find(begin(comps), end(comps), a); 

    cout << "What would you like to modify:" << endl; 
    cout << "a - Name" << endl; 
    cout << "b - IP" << endl; 
    cout << "c - Password" << endl; 

    cin >> x; 
    if(x == 'a'){ 
     string new_name; 
     cout << "What would you like to rename the computer to: "; 
     cin >> new_name; 
     curr->setName(new_name); 
    } 

    if(x == 'b'){ 
     string new_IP; 
     cout << "What would you like the new IP address to be: "; 
     cin >> new_IP; 
     curr->setIP(new_IP); 
    } 

    if(x == 'c'){ 
     curr->setNewPass(); 
    } 

    else{ 
     cout << "Choice is not valid" << endl; 
     return; 
    } 
} 
+4

Вы проверили, чтобы убедиться, что 'curr! = End (comps)' и что comps не пуст? – NathanOliver

+0

@NathanOliver Очевидно нет. –

+0

Вы должны проверить 'curr! = End (comps)' и решить, что делать с не существующим ПК –

ответ

0

кажется, что значение a не был найден в этом заявлении

curr = find(begin(comps), end(comps), a); 

curr и равен end(comps).

Вы должны проверить, что поиск прошел успешно.

Например

if ((curr = find(begin(comps), end(comps), a)) != end(comps)) 
{ 
    // the search was successfull 
} 
0

не ясно, каким образом можно было бы сравнить ПК. Но кажется, что функция find возвращает end (comps), это означает, что в списке/векторе/вообще нет «ПК a». Вы должны проверить, что компьютер был найден

if(curr!=end(comps)) { 
// do whatever you wont with corr 
} 
else { 
//nothing has been found 
} 
2

Вы должны изменить вашу функцию - он должен проверить, был ли find() нашел что-то на все:

void System::modify(PC a){ 
    char x; 
    curr = find(begin(comps), end(comps), a); 

    if(curr == end(comps)) 
    { 
     cout << "Specified PC was not found!" << endl; 
     return; 
    } 

    //... 
} 

Документация Страница для find() говорит:

Возвращаемое значение

Итератор первого элемента в диапазоне, который сравнивается с валом. Если элементы не совпадают, функция возвращает last.

Где last в этом случае end(comps).