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 回答