C2440 d'erreur: 'initialisation': ne peut pas convertir 'std :: _ Vector_iterator <_Ty, _Alloc>' à «type *

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

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
}
Était-ce utile?

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top