"List iterators incompatible" when trying to erase an element from the list

c++, iterator, list

Solution

Change:

employees.erase(it); 

to:

it = employees.erase(it); 

Otherwise on the next iteration of the loop `it` will be referring to an invalid element. `list::erase()` returns the iterator following the last removed element.

[I had interpreted the title as a compiler error, not a runtime error.]

Problem

``` 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; } ``` I am trying to remove some employees from the class instance variable employees, and then return a new list, with only the deleted emeployees. When I try to run the program, it gives an error from the title. I know it has something to do with erasing, and pushing_back, but I just can't figure it out.

Original source