ошибка C2440:"инициализация" :не удается выполнить преобразование из 'std::_Vector_iterator<_Ty,_Alloc>' к 'типу *'

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

Вопрос

Я получаю следующую ошибку при переносе кода 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
}
Это было полезно?

Решение

Если это работало раньше, я предполагаю, что 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);

Другие советы

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

   STRUCT_MUX_NOTIFICATION *pstMuxNotfn = &(*MuxNotfnIterator);

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

STRUCT_MUX_NOTIFICATION *pstMuxNotfn = *MuxNotfnIterator;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top