【问题标题】:C2440 error when using Qt creator but code runs fine using VS2010 Express使用 Qt creator 时出现 C2440 错误,但使用 VS2010 Express 代码运行良好
【发布时间】:2012-06-25 16:24:00
【问题描述】:

我在 VS2010 c++ 的命令行项目中有这些代码行。

        TCHAR          name[30];
        LPTSTR         pname=&name[0];
        std::wstring   OutNumber;
        pname = &name[0];
        GetWindowText(hGameNumber,pname,30);

工作正常,没有问题。 不,我在使用 Qt Creator 的 Qt 小部件基础应用程序中使用相同的行。编译时出现错误:

“错误:C2440:'正在初始化':无法从 'TCHAR *' 转换为 'LPTSTR' 指向的类型是不相关的;转换需要 reinterpret_cast、C-style cast 或 function-style cast"

感谢您的帮助,Lumpi

【问题讨论】:

  • LPTSTR 应该是TCHAR * 的类型定义。如果它不在您的系统上,则说明有问题。您能否包含一个失败的完整程序,并详细说明您是如何编译它的?

标签: c++ visual-studio-2010 qt


【解决方案1】:

演员,如 LPTSTR pname = reinterpret_cast<LPTSTR>(&name[0]);

一切都会好起来的。还删除读取的行 pname = &name[0]; 在您创建 std::wstring 对象之后。

【讨论】:

  • 这一切都取决于 QT 使用哪个编译器来编译代码(通过 gcc-mingw 或其他)
  • @hvd 他可以只使用 (LPTSTR) 演员表,并真正将自己置于编译器的整个“我知道我在做什么”的情绪中。我不怀疑他只不过是一个探索语言并试图学习它的人。此外,他并不是一开始就试图将 Foo 投射到 Bar 中。 windows.h 文件中的基础类型是相同的,至少当它是一个真正的 windows.h 文件而不是 gcc-mingw 套件中包含的文件时。这是相当不同的。
  • @both 我只是想到了,在 VS 中知道在项目选项中设置 UNICODE 的位置。我想我应该在 Qt 中这样做,我只需要弄清楚在哪里......
  • @hvd 你用过mingw吗?我有。它一点也不坏。选择 TCHAR 的基础类型在 mscv 和 mingw 中都是相同的,这只是 mingw 附带的标头如何执行它与常规 windows sdk 标头执行它的方式有点不同,因为它们的意思是对于不同的编译器。
  • @hdv 深入研究每个 msvc(windows sdk, winnt.h) 和 mingw (winnt.h) 的标题,看看你自己的不同之处,你就会明白为什么 mingw 需要演员;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2021-11-25
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多