Fehler C2440: 'Initialisieren': Kann nicht von 'std :: _ vector_iterator <_ty, _alloc>' in 'Typ *' konvertiert werden.

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

Frage

Ich erhalte den folgenden Fehler, während ich den VC6 -Code auf VS2008 migriere. Dieser Code funktioniert in VC6 einwandfrei, gibt jedoch einen Kompilierungsfehler in VC9. Ich weiß, dass es an einer Veränderung des Compilers liegt. Was ist das Problem und wie behebe ich es?

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
}
War es hilfreich?

Lösung

Wenn es zuvor funktioniert hat, vermute ich mux_notification_Vector ist ein Typedef

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

Der Iterator für einen Container kann oft mit einem Zeiger verwechselt werden (weil er auf die gleiche Weise funktioniert), und bei einigen STL -Implementierungen kann er tatsächlich ein Zeiger sein (es war wahrscheinlich der Fall bei STL mit VC6). Aber das gibt keine Garantie dafür.

Was Sie tun sollten, ist Folgendes:

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

Andere Tipps

Ich denke, das sollte den Trick machen:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

Sie müssen den Iterator Dereference haben, um die entsprechende Struktur zu erhalten (nicht sicher, warum es vorher funktioniert hat?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top