2013-11-01 75 views
0

我得到一個C2440('初始化':無法從'std :: _ Vb_reference < _Alloc>'轉換爲'bool &'),該智能感知轉換爲標題錯誤。錯誤:非const的初始值必須是左值

我明白這個錯誤是在說什麼,只是不知道它爲什麼說。下面的代碼產生此錯誤:

std::vector<const UINT>::iterator oIter; 

oIter = std::find(vecuClassID.begin(), vecuClassID.end(), uClassID); 

const UINT uDistance = std::distance(vecuClassID.begin(), oIter); 

bool& refbStaticSectionInitialized = *(vecbStaticSectionInitialized.begin() + uDistance); 

的錯誤似乎在最後一行出現 - 在Visual Studio中,引用操作以紅色下劃線。這是令人困惑,因爲我有一些代碼,做同樣的事情與CRITICAL_SECTION,併產生任何錯誤:

std::vector<const UINT>::iterator oIter; 

oIter = std::find(vecuClassID.begin(), vecuClassID.end(), uClassID); 

const UINT uDistance = std::distance(vecuClassID.begin(), oIter); 

CRITICAL_SECTION& refhStaticSection = *(vechStaticSection.begin() + uDistance); 

是否有事可做與布爾是一個原始的?

+0

什麼是'vecbStaticSectionInitialized' –

+0

這是一個std :: bools向量。 vechStaticSection是CRITICAL_SECTION的向量。 – NmdMystery

+4

'std :: vector '有點「破」,因爲它並不總是像你期望的那樣工作。檢查參考。 – chris

回答

6

問題是,std::vector<bool>不會從其下標操作符或取消引用其迭代器時返回bool&。相反,返回的類型是std::vector<bool>::reference,這是一個類而不是轉換爲bool&

std::vector<bool>背後的錯誤理念是調整接口以允許打包表示。由於一點不可尋址,所以std::vector<bool>::reference作爲一個代理。

相關問題