gpt4 book ai didi

C++:wchar_t 不能作为键或值存储在 std::map 中

转载 作者:行者123 更新时间:2023-12-05 08:45:16 25 4
gpt4 key购买 nike

我正在尝试创建一个数据类型为 std::map<char, wchar_t> 的变量在 C++ 中。当我尝试这样做时,Visual Studio 给出了这个构建错误:

C2440 'initializing': cannot convert from 'initializer list' to 'std::map<char,wchar_t,std::less<char>,std::allocator<std::pair<const char,wchar_t>>>'

wchar_t时也会出现同样的错误是关键数据类型,char是值数据类型。

您可以通过运行以下代码来重现此错误:

const std::map<char, wchar_t> UNICODE_MAP = {
{ 'X', L"█" },
{ 'G', L"▓" },
{ 'O', L"ᗣ" },
{ 'P', L"ᗤ" }
};

我如何使用键作为 char 制作 map ?值为 wchar_t数据类型?

最佳答案

这是一个从窄字符到宽字符的映射,而不是从字符到宽字符串的映射:

取而代之的是:

const std::map<char, wchar_t> UNICODE_MAP = {
{ 'X', L"█" },
{ 'G', L"▓" },
{ 'O', L"ᗣ" },
{ 'P', L"ᗤ" }
};

使用这个:

const std::map<char, wchar_t> UNICODE_MAP = {
{ 'X', L'█' },
{ 'G', L'▓' },
{ 'O', L'ᗣ' },
{ 'P', L'ᗤ' }
};

如果您确实需要该值是一个字符串,则将其声明为:

const std::map<char, std::wstring> UNICODE_MAP = {
{ 'X', L"█" },
...

此外,当我在这里时,我提倡转义源文件中不在 ASCII 范围内的所有 Unicode 字符。在具有不同行为的 IDE、版本控制系统以及大厅里没有阅读您关于“另存为 Unicode”的备忘录的人之间,这很容易被破坏。所以...我的最终建议是:

const std::map<char, wchar_t> UNICODE_MAP = {
{ 'X', L'\u2588' },
{ 'G', L'\u2593' },
{ 'O', L'\u15e3' },
{ 'P', L'\u15e4' }
};

关于C++:wchar_t 不能作为键或值存储在 std::map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73257227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com