Невозможно разыменовать итераторы вектора
Я не понимаю, в чем проблема с этой функцией, я сделал что-то очень похожее на это в прошлом, и она работала нормально, но теперь, когда я пытаюсь запустить эту функцию, я получаю ошибку
"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
}