2014-02-14 3 views
0

Я переношу проекты Visual Studio 2008 vC++ на визуальную студию 2013. Я сталкиваюсь с c3892 при переносе одного из моих проектов. Вот я предоставляю образец фрагмента кода, который воспроизводит ошибку Ям сталкивается при миграции.Проблема Iterator в проекте VC++ в Visual Studio 2013

int _tmain(int argc, _TCHAR* argv[]){ 
    int myints[] = {21,64,17,78,49}; 
    std::set<int> myset (myints,myints+5); 
    std::set<int>::reverse_iterator rit; 
    std::cout << "myset contains:"; 
    for (rit=myset.rbegin(); rit != myset.rend(); ++rit) 
     if(*rit==64) 
      *rit=90; 
    return 0; 
} 

Если мы выполняем выше фрагмент кода в vs2013, И бросают ошибку

Error error C3892: 'std::_Revranit<_RanIt,_Base>::operator *' : you cannot assign to a variable that is const 

Но если мы выполняем тот же кусок кода Visual Studio 2008, И не получают любой типа ошибок в сборка выполнена успешно.

Я должен изменить значение в своем проекте. Пожалуйста, предоставьте мне решение, как избавиться от этой ошибки.

Заранее спасибо. phani

+0

Вы не только переходите на vs13, но и под капотом, переносятся на C++ 11. Я не совсем уверен в ошибке. Но проверьте стандарт кодирования и измените синтаксис для C++ 11 один раз. –

ответ

0

Проще говоря, вам не разрешено напрямую изменять элементы набора после того, как они были вставлены (http://www.cplusplus.com/reference/set/set/). Если вы изменили set на vector в своем примере, он бы скомпилировал просто отлично.

Если вы хотите изменить элемент из набора, вы должны удалить его из набора, а затем вставить измененное значение.

Фактически, this stackoverflow question идентичен вашему и предлагает некоторые крутые обходные решения.

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