无法从“const wchar_t *”转换为“_TCHAR *”

问题描述 投票:0回答:5
_TCHAR* strGroupName = NULL;
const _TCHAR* strTempName = NULL;

//Assign some value to strTempName

strGroupName = _tcschr(strTempName, 92) //C2440

在 VS2008 中编译此代码时,我在上面的行中遇到错误。在 VC6 中编译得很好。

错误 C2440:“=”:无法从 'const wchar_t *' 到 '_TCHAR *'

问题是什么以及如何解决?

c++ visual-studio-2008 porting visual-c++-6
5个回答
8
投票

尝试将其投射为

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

在我看来,VS2008 对类型转换更加严格,并且在某些情况下不会自动执行它们。


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

这是因为您正在使用的函数的变体具有 const _TCHAR* 作为输入并返回 const _TCHAR*。

另一种变体是将 strTempName 声明为 _TCHAR*,而不是 const _TCHAR*。在这种情况下,使用具有 _TCHAR* 参数并返回 _TCHAR* 值的变体函数。


2
投票

strGroupName
也应该是指向
const
的指针。

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

在调用初始化之前不需要声明它。


2
投票

_tcschr
返回一个 const 指针。因此,返回值应该是
const _TCHAR* strGroupName = NULL;
如果无法将 strGroupName 更改为 const 指针,则将这两个指针声明为非常量指针。


0
投票

不是为了恢复死线程,但以防万一其他人最近经历过它,我在从 C++14->20 移动时遇到了同样的错误,可以通过在 CommandLine 下设置 /Zc:StrictStrings- 来修复它我的构建属性。

© www.soinside.com 2019 - 2024. All rights reserved.