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

StackOverflow https://stackoverflow.com/questions/973983

문제

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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top