【问题标题】:error C2664: cannot convert from 'LPTSTR []' to 'LPCTSTR *'错误 C2664:无法从“LPTSTR []”转换为“LPCTSTR *”
【发布时间】:2017-07-18 00:47:28
【问题描述】:

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

错误 C2664: 'DWORD Options(int,LPCTSTR *,LPCTSTR,...)' : 无法将参数 2 从 'LPTSTR []' 转换为 '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 
}

有人知道怎么解决吗?
并解释为什么会出现这个错误?

【问题讨论】:

  • 使用Options(argc, const_cast<LPCTSTR*>(argv), _T("s"), &dashS, NULL);
  • @RbMm:你为什么要使用 const_cast添加 const 限定符?
  • RbMm 它不起作用。它错误:错误2错误LNK2019:函数_main中引用的未解析的外部符号__imp__ReportError和错误LNK1120:1未解析的外部
  • 你理解错误信息吗?
  • @zzZOsiroZzz - 这与 const_cast(argv) 有何关系?

标签: c++ windows winapi


【解决方案1】:

“并解释为什么会出现这个错误?”

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

“有人知道如何解决吗?”

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

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

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 2012-09-05
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多