2017-07-16 69 views
0

我使用Visual Studio 2013转换,我得到以下错误:错误C2664:无法从 'LPTSTR []' 到 'LPCTSTR *'

error C2664: 'DWORD Options(int,LPCTSTR *,LPCTSTR,...)' : cannot convert argument 2 from 'LPTSTR []' to '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 
} 

有谁知道如何修理它?
并解释为什么会发生此错误?

+2

使用'选项(ARGC,const_cast会(ARGV),_T( “S”),dashS,NULL);' – RbMm

+2

@RbMm:为什么你会永远使用'const_cast'来**添加一个'const'限定符? – IInspectable

+0

RbMm它没有工作。它错误:错误LNK2019:解析外部符号__imp__ReportError在函数引用_main \t 和错误LNK1120:1周无法解析的外部 – zzZOsiroZzz

回答

2

“并解释为什么会发生此错误?”

此错误背后的原因可以发现here: 的隐式转换“......将让你悄无声息,不小心修改const对象没有投 ...”

“有谁知道如何解决它?”

LPCTSTR argv[]不是一个常量对象,而是一个常量字符串数组。阵列本身可能会被修改(argv[0] = 0;)。 因为在上面的链接的建议是避免铸造(“......请不要指针转换自己的方式围绕编译时错误信息......”),最简单的办法是改变Options签名(注意添加常量):

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