Erro C2440: 'Inicializando': Não é possível converter de 'std :: _ Vector_iterator <_ty, _alloc>' para 'type *'
-
13-09-2019 - |
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
}
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;