ошибка C2440: «инициализация»: невозможно преобразовать из «std :: _ Vector_iterator <_Ty, _Alloc>» в «тип *» - PullRequest
0 голосов
/ 10 июня 2009

Я получаю следующую ошибку при переносе кода VC6 в VS2008. Этот код прекрасно работает в VC6, но выдает ошибку компиляции в VC9. Я знаю, что это из-за разрыва компилятора. В чем проблема и как ее исправить?

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

код

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
}

Ответы [ 3 ]

8 голосов
/ 10 июня 2009

Если это работало раньше, я предполагаю, что MUX_NOTIFICATION_VECTOR - это typedef

typedef std::vector<STRUCT_MUX_NOTIFICATION> MUX_NOTIFICATION_VECTOR;

Итератор для контейнера часто может быть ошибочно принят за указатель (потому что он работает аналогично), и, в случае некоторых реализаций stl, он может фактически быть указателем (это, вероятно, было в случае с STL, предоставляемым с VC6) ). Но нет никаких гарантий на этот счет.

Что вы должны сделать, это следующее:

STRUCT_MUX_NOTIFICATION& reference = *MuxNotfnIterator;
// or
STRUCT_MUX_NOTIFICATION* pointer = &(*MuxNotfnIterator);
4 голосов
/ 10 июня 2009

Я думаю, что это должно сработать:

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);
1 голос
/ 10 июня 2009

Вам нужно разыменовать итератор, чтобы получить соответствующую структуру (не знаете, почему она работала раньше?):

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
...