2013-04-22 4 views
-1

У меня возникла проблема со следующим разделом кода. Я немного поработал с этим и нашел, что проблема возникает в *pos. Я просто не знаю, как это исправить.C++ «list iterator error»

#include <iostream> 
#include <list> 
#include <string> 

using namespace std; 

list<int>:: iterator pos;   //iterator for pos to allow movement through the list 
list<int> numbers;     // list of int's called "numbers" 
int a;        // @param a: int to store value at the current position in the list for comparison 
int b = 0;       // @param b: int to store larger value after comparison 



/*function maximum cycles through the list of numbers and assigns the number at each position to variable a 
variable a is then compared to variable b which holds the largest element, if variable a is larger than b then 
variable a's value is given to b. 
*/ 


int maximum() 
{ 

     for (pos = numbers.begin(); pos != numbers.end(); pos++) 
     { 
      a = *pos; 
       if (a > b) 
       { 
        b = a; 
       } 
     } 

return b; 
} 


int main() 
{ 

    int UserNum;  //@param UserNum are the numbers the user will enter that will be added to the list 


    //A do loop to fill the list with numbers entered by the user. 
    cout << "Enter some numbers (0 to end)" << endl; 
    do 
    { 
     cin >> UserNum; 
     numbers.push_back (UserNum); 
    } 
    while (UserNum); 


    maximum(); 

    cout << ("Your largest element entered is ") << b << endl; 


    system ("PAUSE"); 
+1

Какой тип 'pos'? – 0x499602D2

+0

его список чисел – Jacob

+0

Где объявляются 'a' и' b'? – dasblinkenlight

ответ

2

Удалить точку с запятой от конца этой строки.

for (pos = numbers.begin(); pos != numbers.end(); pos++) ; 
+0

спасибо, все еще получаю ошибку. Я пробовал разные способы, и ошибка появляется только тогда, когда Я добавляю '* pos'. – Jacob

+0

Я прокомментировал этот раздел и просто запустил оператор 'cout' в функции, и он работал нормально, поэтому что-то с' * pos' не правы, просто не могу нащупать что. – Jacob

+0

Показать объявления для чисел, pos, a и b. – Gary

2

У вас есть точка с запятой в конце вашего for заявления

for (pos = numbers.begin(); pos != numbers.end(); pos++) ; 
                 ^^^ 

Удалить, что и ваш код должен работать.


EDIT:

Обратите внимание, что если ваш список пуст, возвращаемое значение итератора не может быть разыменовываются, что может быть причиной ошибки во время выполнения. Поэтому, если вы запустите свой код и введите 0 непосредственно перед добавлением любых номеров, вы получите сообщение об ошибке, которое вы видите.

+0

все еще получают ошибку, я закомментировал '* pos' и добавил оператор' cout', и это не ошибка. Может ли 'pos' пытаться выйти за пределы, например, пытаться ссылаться на' numbers.end() '? – Jacob

+0

Какая ошибка вы получаете? –

+0

это ошибка во время выполнения: выражение: list iterator не может быть переназначаемым – Jacob