C2440 d'erreur: 'initialisation': ne peut pas convertir 'std :: _ Vector_iterator <_Ty, _Alloc>' à «type *
-
13-09-2019 - |
Question
Je reçois l'erreur suivante lors de la migration du code VC6 à VS2008. Ce code fonctionne très bien dans VC6 mais donne une erreur de compilation dans VC9. Je sais qu'il est à cause d'un changement de rupture du compilateur. Quel est le problème et comment puis-je résoudre ce problème?
error C2440: 'initializing' : cannot convert
from 'std::_Vector_iterator<_Ty,_Alloc>'
to 'STRUCT_MUX_NOTIFICATION *'
code
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
}
La solution
Si cela a fonctionné avant, je devine MUX_NOTIFICATION_VECTOR est un typedef
typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;
Le iterator pour un conteneur peut souvent être confondu avec un pointeur (parce que cela fonctionne de la même façon) et, dans le cas de certaines implémentations stl, il peut effectivement être un pointeur (ce fut probablement le cas avec STL fourni avec VC6 ). Mais il n'y a aucune garantie à ce sujet.
Ce que vous devez faire est le suivant:
STRUCT_MUX_NOTIFICATION& reference = *MuxNotfnIterator;
// or
STRUCT_MUX_NOTIFICATION* pointer = &(*MuxNotfnIterator);
Autres conseils
Je pense que cela devrait faire l'affaire:
STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);
Vous aurez besoin de déréférencer le iterator pour obtenir le struct approprié (ne sais pas pourquoi il a travaillé avant?):
STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;