Невозможно разыменовать итераторы вектора

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

"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;
    }
}

3 ответа

Вам нужно изменить свою функцию - она ​​должна проверить, 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() гласит:

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

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

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

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

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

Кажется, что значение 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
}
Другие вопросы по тегам