خطأ C2440: "تهيئة": لا يمكن تحويلها من "STD :: _ vector_iterater <_ty، _alloc>" to "type * ''

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