如何在C++中创建以char为键、wchar_t为值的std::map?
解决std::map<char, wchar_t>初始化的C2440编译错误
你的代码触发C2440错误的核心原因是初始化值类型不匹配:
- 你声明的map值类型是
wchar_t(单个宽字符) - 但初始化时用了
L"█"这种宽字符串字面量(类型为const wchar_t[]),编译器无法自动将宽字符串转换为单个宽字符。
修正后的代码
#include <map> const std::map<char, wchar_t> UNICODE_MAP = { { 'X', L'█' }, { 'G', L'▓' }, { 'O', L'ᗣ' }, { 'P', L'ᗤ' } };
关键修改点
把宽字符串的双引号""替换为单引号'',这样L'█'就变成了单个宽字符字面量,类型与wchar_t完全匹配,编译器就能正常完成初始化。
额外注意
如果你的目标字符是超出U+FFFF范围的Unicode字符(即非BMP字符),Windows下的wchar_t(2字节)无法容纳这类字符,此时建议改用char32_t作为值类型,对应字面量使用U'字符'的形式,map声明为std::map<char, char32_t>。
内容的提问来源于stack exchange,提问作者AlexanderJCS
相关产品推荐
相关产品推荐

