0

C2440 ('initializing' : cannot convert from 'std::_Vb_reference<_Alloc>' to '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 がプリミティブであることと関係がありますか?

4

1 に答える 1

6

問題は、添字演算子から、または反復子を逆参照するときにstd::vector<bool>返されないことです。bool&代わりに、返される型は、に変換されないstd::vector<bool>::referenceクラスです。bool&

背後にある誤った考えstd::vector<bool>は、インターフェイスを調整してパック表現を許可することです。ビットはアドレス指定できないstd::vector<bool>::referenceため、ビットのプロキシとして機能します。

于 2013-11-01T23:36:26.833 に答える