오류 C2440 : '초기화': 'std :: _ vector_iterator <_ty, _alloc>'에서 'type *'로 변환 할 수 없습니다.
-
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