【发布时间】:2016-03-07 02:57:33
【问题描述】:
我正在尝试遍历一个列表,然后,如果对象的车牌号与通过参数给定的车牌号匹配,并且如果通行费(在 toll() 中计算)小于或等于给定的美分,则删除/从列表中删除对象。我不断收到列表迭代器无法递增的错误,我不知道如何修复它。
void one_time_payment(string& plate_number, int cents) {
// TODO: REWRITE THIS FUNCTION
std::list<LicenseTrip>:: iterator it;
for (it = listLicense.begin(); it != listLicense.end(); std::advance(it, 1)) {
if (it->plate_number().compare(plate_number) == 0) {
cout << "Matching Plate Found" << endl;
if (it->toll() <= cents) {
cout << "Can be paid" << endl;
it = listLicense.erase(it); //Error: list iterator cannot be incremented
}
}
}
cout << "End of Iterator" << endl;
}
【问题讨论】:
-
用
listLicense.erase(it);替换it = listLicense.erase(it); -
使用 gcc 也无法重现。此外,代码中有一个严重的错误。如果“if”条件返回 true,则会导致未定义的行为。在这种情况下,erase() 将返回 end(),这将被分配给
it,并且循环迭代再次递增it。这是未定义的行为。 -
你的代码用 clang 编译得很好
标签: c++ list listiterator