_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 指针,则将这两个指针声明为非常量指针。
不是为了恢复死线程,但以防万一其他人最近经历过它,我在从 C++14->20 移动时遇到了同样的错误,可以通过在 CommandLine 下设置 /Zc:StrictStrings- 来修复它我的构建属性。