خطأ C2440: "تهيئة": لا يمكن تحويلها من "STD :: _ vector_iterater <_ty، _alloc>" to "type * ''
-
13-09-2019 - |
سؤال
أحصل على الخطأ التالي أثناء ترحيل رمز 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;
لا تنتمي إلى StackOverflow