错误c2440:'初始化':无法从'std :: _ vector_iterator <_ty,_alloc>'to'tyte *'转换
-
13-09-2019 - |
题
在将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;
不隶属于 StackOverflow