繁体   English   中英

错误C2440:“正在初始化”:无法从“ std :: _ Vector_iterator <_Ty,_Alloc>”转换为“类型*”

[英]error C2440: 'initializing' : cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>' to 'type *'

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

如果以前可行,我猜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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM