-3

很难在网上找到关于以下语法的解释,并且在这些论坛中搜索 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 重建所有这些代码,所以发生了一些变化。同样,我不确定这是否与我上面的两个问题有关,但我想全面了解正在发生的事情。

4

1 回答 1

2

字符串文字(或字符文字)之前的“L”(或“l”,尽管大多数人建议反对它,因为它看起来像 a 1)使其成为“宽”文字,因此它包含的内容wchar_tchar,它的地址是 awchar_t *而不是 a char *

C 和 C++ 标准没有准确指定宽字符是什么。在 Windows 上,它们通常是 16 位,表示 UTF-16 中的字符串。在大多数类 Unix 系统上,它们通常是 32 位,表示 UCS-4 中的字符串。

在这种特殊情况下,""afterL意味着它只是返回一个空字符串。

于 2017-01-17T16:49:20.600 回答