エラーC2440: '初期化すると、': '型*' 'にはstd :: _ Vector_iterator <_Ty、_Alloc>' から変換することはできません
-
13-09-2019 - |
質問
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;
所属していません StackOverflow