2017-07-16 67 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, ...)