0

VC6 コードを VS2008 に移行しているときに、次のエラーが発生します。このコードは VC6 では問題なく動作しますが、VC9 ではコンパイル エラーが発生します。コンパイラの重大な変更が原因であることはわかっています。何が問題で、どうすれば修正できますか?

error C2440: 'initializing' : cannot convert
    from 'std::_Vector_iterator<_Ty,_Alloc>'
      to 'STRUCT_MUX_NOTIFICATION *' 

コード

MUX_NOTIFICATION_VECTOR::iterator MuxNotfnIterator;

for(
    MuxNotfnIterator = m_MuxNotfnCache.m_MuxNotificationVector.begin();
    MuxNotfnIterator != m_MuxNotfnCache.m_MuxNotificationVector.end();
    MuxNotfnIterator ++ 
   )
{
    STRUCT_MUX_NOTIFICATION *pstMuxNotfn = MuxNotfnIterator; //Error 2440
}
4

3 に答える 3

8

以前に機能していた場合、 MUX_NOTIFICATION_VECTOR は typedef であると推測しています

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

コンテナーのイテレーターは、ポインターと間違われることがよくあります (同じように機能するため)。一部の stl 実装の場合、実際にはポインターである可能性があります (VC6 で提供される STL の場合はおそらくそうでした)。しかし、それについての保証はありません。

あなたがすべきことは次のとおりです。

STRUCT_MUX_NOTIFICATION& reference = *MuxNotfnIterator;
// or
STRUCT_MUX_NOTIFICATION* pointer = &(*MuxNotfnIterator);
于 2009-06-10T06:44:05.840 に答える
4

これでうまくいくはずだと思います:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);
于 2009-06-10T06:36:58.273 に答える
1

適切な構造体を取得するには、反復子を逆参照する必要があります (以前は機能していた理由がわかりません)。

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
于 2009-06-10T06:35:27.637 に答える