خطأ C2593: مشغل = غامض
-
05-07-2019 - |
سؤال
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
<اقتباس فقرة>
خطأ C2593: مشغل = غامضة
اقتباس فقرة>وماذا الاحالة أعلاه تعطي هذا الخطأ؟ وهو يعمل في VC6. لا يجمع في VC9.
المحلول
وrevrsetagcacheiter->second
هو من نوع IWString
.
وبالتالي فإنه لن ترجمة. أنا لا أعتقد أنه سوف يجمع في VC6 أيضا.
على سأحاول مرة أخيرة واحدة : لهل BasicString صفك c_str طريقة ()؟ إذا كان الأمر كذلك محاولة تحويله إلى wstring باستخدام std::wstring str(iter->second.c_str());
نصائح أخرى
وفي تخمين، VC6 يسمح أكثر من تحويل المعرفة من قبل مستخدم واحد ليتم تطبيقها، في حين أن (صحيح) VC9 لا. نلقي نظرة على C ++ تحويلات ضمنية لمناقشة مشكلة عامة.
والحل العام هو توفير التحويل اللازم نفسك، بدلا من المحاولة مترجم للقيام بذلك.
وحاول أن يلقي ما تعيين لنوع الصحيح.
ومثل:
strCurTag = (wstring)revrsetagcacheiter->second;
والأفضل من ذلك، قد يكون المقصود:
IWstring strCurTag;
ويجب عادة تجنب تحويلات ضمنية، أي جعل كل من المهام الخاصة بك تعمل مع نفس النوع بالضبط في جانب واحد والآخر، وخصوصا عندما انها تافهة لمعرفة التي تشارك أنواع. الاعتماد، أو محاولة الاعتماد على تحويلات ضمنية ليست فكرة جيدة.
وإذا كان الأمر كذلك:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
ولا تجمع، ثم علينا أن نبدأ في التفكير في المشكلة.