لا يمكن التحويل من "const wchar_t *" إلى '_tchar *
-
14-09-2019 - |
سؤال
_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;
//Assign some value to strTempName
strGroupName = _tcschr(strTempName, 92) //C2440
أحصل على خطأ في السطر أعلاه أثناء تجميع هذا الرمز في VS2008. في VC6 فهو يجمع بشكل جيد.
خطأ C2440: '=': لا يمكن تحويلها من "const wchar_t *" إلى '_tchar *'
ما يبدو أن المشكلة وكيف يمكنني إصلاحه؟
المحلول
حاول إلقاء ذلك
strGroupName = (_TCHAR*)_tcschr(strTempName, 92);
يبدو لي أن VS2008 حصلت أكثر قليلا صارمة على طريات النوع، ولن تفعلها تلقائيا في بعض الحالات.
نصائح أخرى
strGroupName = const_cast<_TCHAR*>( _tcschr(strTempName, 92));
وذلك لأن البديل من الوظيفة التي تستخدمها لها CONST _TCHAR * كمدخل وإرجاع CONST _TCHAR *.
سيكون البديل الآخر هو الحصول على اسم strtempname كما _tchar *، وليس كما const _tchar *. في هذه الحالة، يتم استخدام وظيفة البديل التي تحتوي على معلمة _tchar * وإرجاع قيمة _tchar *.
strGroupName
يجب أن يكون أيضا مؤشر ل const
.
const _TCHAR* strGroupName = _tcschr(strTempName, 92);
لا حاجة لإعلانها حتى الدعوة إلى تهيئة ذلك.
_tcschr
يعود مؤشر const. وبالتالي يجب أن تكون قيمة العودة const _TCHAR* strGroupName = NULL;
إذا لم يكن من الممكن تغيير اسم StrgroupName إلى مؤشر CONST، فقم بإعلان كل من المؤشرات كأماكن غير مؤتمرات غير مؤتمرات.