Erro C2440: 'Inicializando': Não é possível converter de 'std :: _ Vector_iterator <_ty, _alloc>' para 'type *'

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

Pergunta

Estou recebendo o seguinte erro ao migrar o código VC6 para o VS2008. Esse código funciona bem no VC6, mas fornece um erro de compilação no VC9. Eu sei que é por causa de uma mudança de quebra do compilador. Qual é o problema e como faço para corrigi -lo?

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

Solução

Se funcionou antes, acho que Mux_Notification_Vector é um typedef

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

O iterador para um contêiner geralmente pode ser confundido com um ponteiro (porque funciona da mesma maneira) e, no caso de algumas implementações do STL, ele pode ser um ponteiro (provavelmente foi o caso do STL fornecido com o VC6). Mas não há garantia sobre isso.

O que você deve fazer é o seguinte:

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

Outras dicas

Eu acho que isso deve fazer o truque:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

Você precisará desreferenciar o iterador para obter a estrutura apropriada (não sei por que funcionou antes?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top