Errore C2440: 'inizializzazione': non può convertire da 'std :: _ Vector_iterator <_Ty, _Alloc>' di 'tipo *'

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

Domanda

Mi è toccato il seguente errore durante la migrazione di codice VC6 per VS2008. Questo codice funziona bene in VC6, ma dà un errore di compilazione in VC9. So che è a causa di un cambiamento compilatore di rottura. Qual è il problema e come posso risolvere il problema?

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

Codice

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
}
È stato utile?

Soluzione

Se ha funzionato prima, sto indovinando MUX_NOTIFICATION_VECTOR è un typedef

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

L'iteratore per un contenitore spesso può essere scambiato con un puntatore (perché funziona allo stesso modo) e, nel caso di alcune implementazioni STL, in realtà può essere un puntatore (probabilmente era il caso di STL fornito con VC6 ). Ma non v'è alcuna garanzia a riguardo.

Che cosa si dovrebbe fare è la seguente:

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

Altri suggerimenti

Credo che questo dovrebbe fare il trucco:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

È necessario dereference l'iteratore per ottenere lo struct appropriata (non so perché ha funzionato prima?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top