2009-06-16 186 views
4
_TCHAR* strGroupName = NULL; 
const _TCHAR* strTempName = NULL; 

//Assign some value to strTempName 

strGroupName = _tcschr(strTempName, 92) //C2440 

在VS2008中编译此代码时,上面的代码出现错误。在VC6中编译好。无法从'const wchar_t *'转换为'_TCHAR *'

错误C2440: '=':不能从 转换 '常量为wchar_t *' 到 '_TCHAR *'

似乎是什么问题,如何解决?

回答

5

尝试铸造它作为

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

在我看来,VS2008上了车类型多一点严格的管型,不会自动做他们在某些情况下。

+0

+1。这摆脱了编译错误。 – bobbyalex 2009-06-16 08:16:01

+3

使用const_cast。 – GManNickG 2009-06-16 11:10:44

2

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

+0

这很好,但我不能将strGroupName更改为const,因为它会影响不期望const变量的代码的其余部分。功能例如。 – bobbyalex 2009-06-16 06:01:50

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

这是因为你使用的函数的变体有一个const _TCHAR *作为输入并返回一个const _TCHAR *。

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

1

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

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

不需要声明它,直到初始化它的调用。

相关问题