エラーC2440: '初期化すると、': '型*' 'にはstd :: _ Vector_iterator <_Ty、_Alloc>' から変換することはできません

StackOverflow https://stackoverflow.com/questions/973983

質問

VS2008にVC6コードを移行しながら、

私は、次のエラーを取得しています。このコードは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
}
役に立ちましたか?

解決

それは前に働いていた場合は、

、私は推測してい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);

他のヒント

私は、これはトリックを行うべきだと思います:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

あなたは適切な構造体を(?それは前に働いていた理由はわからない)を取得するイテレータを逆参照する必要があります

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top