为什么错误:C++ 列表中的调用没有匹配的函数

why error : no matching function for call in c++ list

提问人:Jonghyun 提问时间:6/20/2022 更新时间:6/20/2022 访问量:236

问:

我想删除“m_list”中的元素

但是此代码出现错误“没有匹配函数用于调用 list::erase”

例如)

std::list<std::list<Myclass *>::iterator> **m_list;

std::list<Myclass *>::iterator it;
std::list<Myclass *>::iterator dlt;
for(it = m_list[a]->begin(); it != m_list[a]->end(); it++ ) {
  if ((*it)->condition = true) {
    dlt = m_list[a]->erase(it);   // error detected here
  }
}

我不知道为什么list::erase不起作用

有人回答我如何解决这个问题,请...

C++ 列表 std 擦除

评论

0赞 user17732522 6/20/2022
它应该已经在 失败。类型错误(或者更确切地说,您在循环中的逻辑可能是错误的。考虑什么是类型,然后是什么类型。it = m_list[a]->begin()itm_list[a]m_list[a]->begin()
1赞 paddy 6/20/2022
从循环中循环访问的列表中擦除时,不应在 for 循环本身中使用。相反,在循环主体中递增它,但前提是您不擦除。......这是因为擦除会使迭代器失效,这也是它返回新迭代器的原因。it++if ((*it)->condition) it = m_list[a]->erase(it); else ++it;
0赞 Swift - Friday Pie 6/20/2022
std::list<std::list<Myclass *>::iterator> **m_list;很奇怪,它是指针到指针。它从未被分配过。所以它不能像它显示的那样工作
0赞 Swift - Friday Pie 6/20/2022
由于迭代器失效,将迭代器存储在不同的容器中是有风险的。结果会更奇怪。begin()std::list<std::list<Myclass *>::iterator>::iterator
2赞 chi 6/20/2022
(*it)->condition = true应该是,甚至更好。(*it)->condition == true(*it)->condition

答: 暂无答案