我得到一个C2440('初始化':无法从'std :: _ Vb_reference< _Alloc>'转换为'bool&'),IntelliSense会将其转换为标题中的错误。
我得到了这个错误所说的内容,而不是为什么会这么说。下面的代码产生了这个错误:
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);
它与bool是一个基元有关吗?
答案 0 :(得分:6)
问题是std::vector<bool>
没有从其下标运算符返回bool&
或者解除引用它的迭代器。相反,返回的类型为std::vector<bool>::reference
,这是不类转换为bool&
。
std::vector<bool>
背后的错误观念是调整界面以允许打包表示。由于某个位不可寻址,std::vector<bool>::reference
可以作为一个代理。