【发布时间】:2020-04-25 11:03:03
【问题描述】:
这是我的代码:
std::list<User>::iterator it;
while (it != allUsers.end())
{
if (it->getId() == userId)
{
allUsers.remove(*it);
return *it;
}
else
{
it++;
}
}
我得到的错误:列表迭代器与擦除不兼容 为什么?
【问题讨论】:
-
remove之后的迭代器无效。您无法访问它。 -
请复制并粘贴确切的消息。
-
从列表中删除一个值会擦除被删除的元素,这会使引用该列表元素的迭代器无效。所以
allUsers.remove(*it)使it无效。取消引用它(如return *it)`然后会导致未定义的行为。你的编译器告诉你(粗略地说)。 -
显示完整的函数和
User类。制作minimal reproducible example。it是默认构造的,不会自动从allUsers.begin()开始。 -
@Hee hee 迭代器 std::list
::iterator it;未初始化。