Error C2440: 'Inicialización': no ​​se puede convertir de 'std :: _ vector_iterator <_ty, _alloc>' a 'tipo *'

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

Pregunta

Recibo el siguiente error al migrar el código VC6 a VS2008. Este código funciona bien en VC6 pero ofrece un error de compilación en VC9. Sé que se debe a un cambio de ruptura del compilador. ¿Cuál es el problema y cómo lo soluciono?

error C2440: 'initializing' : cannot convert
    from 'std::_Vector_iterator<_Ty,_Alloc>'
      to 'STRUCT_MUX_NOTIFICATION *' 

Código

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
}
¿Fue útil?

Solución

Si funcionó antes, supongo que mux_notification_vector es un typedef

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

El iterador de un contenedor a menudo se puede confundir con un puntero (porque funciona de la misma manera) y, en el caso de algunas implementaciones de STL, en realidad puede ser un puntero (probablemente fue el caso con STL provisto de VC6). Pero no hay garantía sobre eso.

Lo que debes hacer es lo siguiente:

STRUCT_MUX_NOTIFICATION& reference = *MuxNotfnIterator;
// or
STRUCT_MUX_NOTIFICATION* pointer = &(*MuxNotfnIterator);

Otros consejos

Creo que esto debería hacer el truco:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

Deberá desreferencia al iterador para obtener la estructura apropiada (¿no está seguro de por qué funcionó antes?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top