我正在尝试创建一个数据类型为 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/