Ich habe ein altes Projekt, das mit Visual Studio 2003 erstellt wurde und ich es vor kurzem mit VS2005 neu kompiliert. Doch während der Laufzeit, erhalte ich folgende Fehlermeldung:Liste Iterator nicht inkrementell
Liste Iterator nicht inkrementierbarer
ich das Programm auf diese Funktion zurückverfolgt:
void InputQueue::update()
{
list<PCB>::iterator iter;
list<PCB>::iterator iterTemp;
for(iter = begin(); iter != end(); iter++)
{
if(iter->arrivalTime == 0)
{
ReadyQueue::getInstance()->add(*iter);
iterTemp = iter;
iter++;
erase(iterTemp);
}
}
}
Ich bin kein C++ Experten und das ist so weit wie der VS Debugger mich hat. Könnte mir jemand erklären, was das Problem ist? einmal vor dem Element Entfernung und noch einmal am Ende der Schleife: Wenn iter->arrivalTime == 0
, dann wird die Liste Iterator zweimal erhöht
Dank
Es scheint von http://www.sgi.com/tech/stl/Iterators.html, dass vorwärts Iteratoren zuweisbar sind. Die Iteratoren von std :: list sind bidirektionale Iteratoren (http://www.sgi.com/tech/stl/List.html, http://www.sgi.com/tech/stl/ReversibleContainer.html) und sind somit auch Iteratoren weiterleiten. :-) –
Hmm, ist das was sie mit "multi-pass" meinen? Weil sonst nichts über die Zuweisbarkeit * des Iterators * gesagt wird (im Gegensatz zu seinem Wert!). –