C++ &引用;列出不兼容的迭代器“;尝试从列表中删除元素时 列出移除员工(常量字符串和名称, 常量字符串和lastname) { 删除的列表; 列表::迭代器; for(it=employees.begin();it!=employees.end();) { 如果(it->get_name()==name&&it->get_lastname()==lastname) { 移除的列表。将_向后推(*它); 删除(它); } 其他的 it++; } 已删除的返回列表; }

C++ &引用;列出不兼容的迭代器“;尝试从列表中删除元素时 列出移除员工(常量字符串和名称, 常量字符串和lastname) { 删除的列表; 列表::迭代器; for(it=employees.begin();it!=employees.end();) { 如果(it->get_name()==name&&it->get_lastname()==lastname) { 移除的列表。将_向后推(*它); 删除(它); } 其他的 it++; } 已删除的返回列表; },c++,list,iterator,C++,List,Iterator,我试图从类实例变量employees中删除一些employees,然后返回一个新列表,其中只包含已删除的ememployees。当我试图运行程序时,它从标题中给出了一个错误。我知道这与擦除和向后推_有关,但我就是搞不懂 变化: list<employee> remove_employees(const string& name, const string& lastname) { list<

我试图从类实例变量employees中删除一些employees,然后返回一个新列表,其中只包含已删除的ememployees。当我试图运行程序时,它从标题中给出了一个错误。我知道这与擦除和向后推_有关,但我就是搞不懂

变化:

list<employee> remove_employees(const string& name,
                                const string& lastname) 
{
    list<employee> listOfRemoved; 
    list<employee>::iterator it; 

    for(it=employees.begin(); it != employees.end(); )
    {
        if(it->get_name() == name && it->get_lastname() ==lastname) 
        {
            listOfRemoved.push_back(*it); 
            employees.erase(it); 
        }
        else
            it++;
    }

    return listOfRemoved; 
}
致:

否则,在循环
的下一次迭代中,它将引用无效元素。返回最后删除的元素后面的迭代器


[我将标题解释为编译器错误,而不是运行时错误。]

usluzbenci.erase(它);本来应该是员工的。删除(它),在我翻译整件事的时候忘了。你能完整地发布编译器消息,包括行号吗?我刚刚用VS2010和VS2008编译了这篇文章(在为
employee
添加了一个简单的
struct
之后)。
.erase()
应将返回值存储在
it
btw中。调试断言失败。程序:..\vc\include\list\Line:286表达式:列表迭代器不兼容,使用g++4.3.4编译。
employees.erase(it); 
it = employees.erase(it);