Fehler C2440: 'Initialisieren': Kann nicht von 'std :: _ vector_iterator <_ty, _alloc>' in 'Typ *' konvertiert werden.
-
13-09-2019 - |
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
}
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;