错误C2664:无法转换为' LPTSTR []'到LPCTSTR *'

时间:2017-07-16 13:45:55

标签: c++ windows winapi

我使用Visual Studio 2013,我收到以下错误:

  

错误C2664:' DWORD选项(int,LPCTSTR *,LPCTSTR,...)' :无法从' LPTSTR []'转换参数2到LPCTSTR *' 54 1 ConsoleApplication3

这是代码:

DWORD Options(int argc, LPCTSTR argv[], LPCTSTR OptStr, ...){
    // Code
}
int _tmain(int argc, LPTSTR argv[]){
   iFirstFile = Options(argc, argv, _T("s"), &dashS, NULL);
   // Code 
}

有谁知道如何修理它? 并解释为什么会出现这种错误?

1 个答案:

答案 0 :(得分:2)

"并解释为什么会出现此错误?"

可以找到此错误背后的原因here: 一个隐式的转换" ...会让你默默无意地修改一个const对象没有强制转换 ......"

"有谁知道如何修复它?"

LPCTSTR argv[]不是常量对象,而是常量字符串数组。可以修改数组本身(argv[0] = 0;)。 由于上面链接中的建议是为了避免强制转换(" ...请不要指针 - 绕过编译时错误消息..." ),最简单的解决方案是更改Options的签名(注意添加的 const ):

DWORD Options(int argc, const LPCTSTR argv[], LPCTSTR OptStr, ...)