【发布时间】:2017-06-01 20:03:48
【问题描述】:
很难在网上找到有关以下语法的解释,并且在这些论坛中搜索 L"" 并没有提供任何结果。我在 Qt5 中调试一个太长而无法粘贴到此处的应用程序。我正在尝试解决最后一个错误,该错误指向包含 --> return L""; 的代码行。
C2440: 'return': 无法从 'const wchar_t[1]' 转换为 'LPWSTR'
我的第一个问题是这是什么意思 --> L""
最后,我该如何解决这个编译器错误?
LPWSTR ImageThread::getLastErrorString(DWORD lastError)
{
DWORD result = FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
lastError,
LANG_USER_DEFAULT,
errorString,
sizeof(errorString),
NULL);
if (result > 0)
{
return errorString;
}
else
{
return L"";
}
}
我的假设是因为 wchar_t[1] 是 1 个字节,而 LPWSTR 是 2 个字节,它无法转换???我不确定这是否重要,但我在 Qt5 的工具栏中出现另一个错误,说“错误:无法使用“UTF-8”编码解码“myfile.cpp”。无法编辑”。它给了我一个选择编码的选项。我确信这是因为这段代码是用旧版本的 Qt 编写的,现在因为我正在用 Qt5 重建所有这些代码,所以发生了一些变化。同样,我不确定这是否与我上面的两个问题有关,但我想全面了解正在发生的事情。
【问题讨论】:
-
在这些论坛中搜索 L"" 没有提供任何结果所以不是论坛!更新:我的假设是因为 wchar_t[1] 是 1 个字节,而 LPWSTR 是 2 个字节,它无法转换您是如何得出
wchar_t[1]是一个字节的结论的?还是LPWSTR是 2 个字节?一般来说,编译器抱怨L""是const,而您的函数返回非const值。 -
我不能说任何关于错误的信息,但你可以在这里阅读
L""之类的字符串字面前缀:en.cppreference.com/w/cpp/language/string_literal -
该错误与 L 前缀无关,而是因为 const 已在没有显式强制转换的情况下被分配。然而,MS 对所有 wchar、WCHAR wchar_t 的东西都感到困惑。尝试使用 UTF8 并在最后时刻转换为 MS,当实际与 Windows 函数交互时。
-
为了编译像
L""这样的东西,你需要定义UNICODE预处理器符号,并且可能在你的代码中包含windows.h。