Impossible de convertir de « const wchar_t * » à « _TCHAR * »
-
14-09-2019 - |
Question
_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;
//Assign some value to strTempName
strGroupName = _tcschr(strTempName, 92) //C2440
Je reçois une erreur à la ligne ci-dessus lors de la compilation ce code dans VS2008. En VC6 il compile très bien.
Erreur C2440: '=': ne peut pas convertir 'Const wchar_t *' à '_TCHAR *'
Ce qui semble être le problème et comment puis-je résoudre ce problème?
La solution
Essayez coulée comme
strGroupName = (_TCHAR*)_tcschr(strTempName, 92);
me semble que VS2008 a obtenu un peu plus stricte sur Conversions de type, et ne le fera pas automatiquement les dans certains cas.
Autres conseils
strGroupName = const_cast<_TCHAR*>( _tcschr(strTempName, 92));
En effet, la variante de la fonction que vous utilisez a un const _TCHAR * en entrée et retourne un const _TCHAR *.
Une autre variante serait d'avoir strTempName déclaré _TCHAR *, et non comme const _TCHAR *. Dans ce cas, la fonction de la variante ayant un paramètre _TCHAR * et retourner une valeur _TCHAR * est utilisé.
strGroupName
devrait également être un pointeur vers const
.
const _TCHAR* strGroupName = _tcschr(strTempName, 92);
Pas besoin de déclarer que l'appel à l'initialiser.
_tcschr
renvoie un pointeur const. D'où la valeur de retour doit être const _TCHAR* strGroupName = NULL;
S'il est impossible de changer strGroupName à un pointeur const puis déclarer les pointeurs comme pointeurs non-const.