MFC中 error C2440错误分析及解决方法

错误 3 error C2440: "初始化": 无法从"char *"转换为"ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>

网上搜了方法,说可以到项目属性中的字符集里面把"使用Unicode字符集"改为"使用多字符集"然后应用,我这边试了错误更多了,之前错误没了,但有新的错误...

然后我找到我错的地方是这样的:

复制代码
	CString T1 = (char*)(_bstr_t)XMLNODE->nodeName;
	CString T2 = (char*)(_bstr_t)XMLNODE->text;

应该是char转换为CString这里不对,想了想可能版本原因(vs2013)导致,又搜了别的方法看到一条评论下说要把**(char )改为(TCHAR*)**,改完之后不报错了,但还是想找一下原因:

字符串相关类型定义:

Typedef 定义

CHAR char

PSTR 或 LPSTR char*

PCSTR 或 LPCSTR const char*

PWSTR 或 LPWSTR wchar_t*

PCWSTR 或 LPCWSTR const wchar_t*

例如:typedef wchar_t WCHAR;

Windows使用UTF-16编码表示Unicode字符,为了将其与8位ANSI字符区分,UTF-16称为宽符,**Unicode是首选字符编码因其支持所有字符集和语言。**可能因为这里不能随便改字符集吧。

Microsoft向Windows引入Unicode支持时,通过提供两组并行API缓解转换,一组用于ANSI字符串(例如SetWindowTextA),一组用于Unicode字符串(SetWindowTextW,一般建议使用Unicode版本,ANSI效率可能较低)

TCHARS:某些情况下根据目标平台为ANSI或Unicode字符串编译相同的代码提供将字符串映射到Unicode或ANSI的宏:

宏 Unicode ANSI

TCHAR wchar_t char

TEXT("x")或

_T("x") L"x" "x"

所以说,可能我的版本不支持转换的原因是使用ANSI的(char*),而使用TCHAR和wchar_t都是可以的,我尝试了一下,也没报错

相关推荐
Zhichao_9728 分钟前
【UE5 C++课程系列笔记】33——商业化Json读写
c++·ue5
云边有个稻草人1 小时前
【C++】第八节—string类(上)——详解+代码示例
开发语言·c++·迭代器·string类·语法糖auto和范围for·string类的常用接口·operator[]
惊鸿一博1 小时前
c++ &&(通用引用)和&(左值引用)区别
开发语言·c++
nuo5342022 小时前
黑马 C++ 学习笔记
c语言·c++·笔记·学习
DARLING Zero two♡2 小时前
C++类间的 “接力棒“ 传递:继承(上)
开发语言·c++·继承·里氏替换原则
会讲英语的码农2 小时前
如何学习C++以及C++的宏观认知
开发语言·c++·学习
Merokes10 小时前
关于Gstreamer+MPP硬件加速推流问题:视频输入video0被占用
c++·音视频·rk3588
请来次降维打击!!!11 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
别NULL11 小时前
机试题——统计最少媒体包发送源个数
c++·算法·媒体
嘤国大力士12 小时前
C++11&QT复习 (七)
java·c++·qt