Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot convert from 'const wchar_t *' to '_TCHAR *'

_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;

//Assign some value to strTempName

strGroupName = _tcschr(strTempName, 92) //C2440

I get an error at the above line while compiling this code in VS2008. In VC6 it compiles fine.

Error C2440: '=' : cannot convert from 'const wchar_t *' to '_TCHAR *'

What seems to be the problem and how do I fix it?

like image 978
bobbyalex Avatar asked Jun 16 '09 05:06

bobbyalex


4 Answers

Try casting it as

strGroupName = (_TCHAR*)_tcschr(strTempName, 92);

Seems to me that VS2008 got a little more strict on type casts, and won't automatically do them in some cases.

like image 88
Jack B Nimble Avatar answered Sep 30 '22 17:09

Jack B Nimble


strGroupName = const_cast<_TCHAR*>( _tcschr(strTempName, 92));

This is because the variant of the function you're using has a const _TCHAR* as input and returns a const _TCHAR*.

Another variant would be to have strTempName declared as _TCHAR*, and not as const _TCHAR*. In this case, the variant function having a _TCHAR* parameter and returning a _TCHAR* value is used.

like image 44
Cătălin Pitiș Avatar answered Sep 30 '22 19:09

Cătălin Pitiș


strGroupName should also be a pointer to const.

const _TCHAR* strGroupName = _tcschr(strTempName, 92);

No need to declare it until the call to initialise it.

like image 24
James Hopkin Avatar answered Sep 30 '22 19:09

James Hopkin


_tcschr is returning a const pointer. Hence the return value should be const _TCHAR* strGroupName = NULL; If it is not possible to change strGroupName to a const pointer then declare both the pointers as non-const pointers.

like image 40
Naveen Avatar answered Sep 30 '22 19:09

Naveen