错误C2440:'初始化':无法转换为'std :: _ Vector_iterator< _Ty,_Alloc>'输入 *'

时间:2009-06-10 06:30:11

标签: c++ visual-studio-2008 iterator porting vc6

将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
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

我认为这应该可以解决问题:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

答案 2 :(得分:1)

您需要取消引用迭代器才能获得相应的结构(不确定它之前的原因是什么?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;