2015-12-28 3 views
1

Я пытаюсь реализовать список, который будет хранить соответствующие индексы. Однако я получаю сообщение об ошибке for (index_itr = (list_size - numberOfEvents - 1), упомянутых в названии. Какую ошибку я делаю, и как ее исправить?Ошибка: присвоение '_List_iterator <unsigned int, unsigned int &, unsigned int *>' from 'int'

void logPrintEntry(UINT32 index, UINT32 portID, UINT16 numberOfEvents) 
{ 
    LOG_ENTRY log; 
    list <UINT32> list_telnet_indices; 
    log = (pLOG_ENTRY) &(Data.Log.log[index]); 
    list <UINT32> ::iterator index_itr; 
    UINT16 list_size = list_telnet_indices.size(); 
    if(list_size <= numberOfEvents) 
    { 
     // print all logs 
     for (index_itr = list_telnet_indices.begin(); 
      index_itr != list_telnet_indices.end(); ++index_itr) 
     { 
      printDataOnly(log, *index_itr, portID); 
     } 
    } 
    else 
    { 
     // print only the last relevant entries 
     for (index_itr = (list_size - numberOfEvents - 1);  //error: assignment to '_List_iterator<unsigned int,unsigned int &,unsigned int *>' from 'int' 
     index_itr != list_telnet_indices.end(); ++index_itr) 
     { 
      printDataOnly(log, *index_itr, portID); 
     } 
    } 
} 

ответ

1

index_itr является итератора, list_size - numberOfEvents - 1 представляет собой целое число. Они несовместимы.

Использование std::advance установить итератор std::list

#include <iterator>  // std::advance 

index_itr = list_telnet_indices.begin(); 
std::advance(index_itr, list_size - numberOfEvents - 1); 
for (; index_itr != list_telnet_indices.end(); ++index_itr) 
{ 
    ... 
} 
+0

я взял свободу, чтобы объединить наши два ответа. Вы даете подходящее решение, и я объяснил ошибку. Я думаю, что этот ответ получит больше внимания таким образом. – YSC

+0

@YSC спасибо! – Rabbid76

Смежные вопросы