2014-02-14 91 views
0

我將Visual Studio 2008 vC++項目遷移到Visual Studio 2013.遷移其中一個項目時,我正面臨c3892。在此我提供了一些示例代碼,它重現了錯誤Iam面臨遷移。Visual Studio 2013中的VC++項目中的迭代器問題

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與您的相同,並提出了一些很酷的解決方法。

相關問題