Невозможно преобразовать из 'const wchar_t *' в '_TCHAR *' - PullRequest
4 голосов
/ 16 июня 2009
_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;

//Assign some value to strTempName

strGroupName = _tcschr(strTempName, 92) //C2440

Я получаю сообщение об ошибке в приведенной выше строке при компиляции этого кода в VS2008. В VC6 прекрасно компилируется.

Ошибка C2440: '=': невозможно преобразовать из от 'const wchar_t *' до '_TCHAR *'

В чем проблема и как ее исправить?

Ответы [ 4 ]

6 голосов
/ 16 июня 2009
strGroupName = const_cast<_TCHAR*>( _tcschr(strTempName, 92));

Это потому, что вариант используемой вами функции имеет const _TCHAR * в качестве входных данных и возвращает const _TCHAR *.

Другим вариантом может быть объявление strTempName как _TCHAR *, а не как const _TCHAR *. В этом случае используется вариантная функция, имеющая параметр _TCHAR * и возвращающая значение _TCHAR *.

5 голосов
/ 16 июня 2009

Попробуйте привести его как

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

Мне кажется, что VS2008 стал немного более строгим в приведении типов, и в некоторых случаях он не будет выполняться автоматически.

2 голосов
/ 16 июня 2009

_tcschr возвращает константный указатель. Следовательно, возвращаемое значение должно быть const _TCHAR* strGroupName = NULL; Если невозможно изменить strGroupName на константный указатель, тогда объявите оба указателя как неконстантные указатели.

1 голос
/ 16 июня 2009

strGroupName также должен быть указателем на const.

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

Нет необходимости объявлять его до вызова для его инициализации.

...