WTL中CString CPoint等出现冲突的问题

本文解决了在WTL工程中CString和CRect等类型定义冲突的问题。通过调整头文件包含顺序,即在atlapp.h前引入atlstr.h,避免了编译器混淆WTL与ATL库中的CString定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做wtl工程的时候 我进行编译 出现了CString和CRect等模糊,冲突等的提示问题。

我想可能是头文件的原因,挨个盘查,发现#include <atlimage.h> 和#include <atlmisc.h>有冲突,atlmisc.h头文件中包含了对cstring字符串的定义。但是我CString和atlimage.h都需要使用。

后来从网上搜索资料,说是因为在编译CString时,分辨不清是wtl的cstring还是atl的cstring。解决办法如下:

去掉对atlmisc.h的包含,在atlapp.h前面包含atlstr.h即可。

具体原文转载如下:(非常感谢happycock的专栏

 WTL中CString的使用问题  

如果你按照说明定义_WTL_USE_CSTRING,然后包含atlmsic.h,就会出现CString定义不明的编译错误,其实就是编译器分不清你是用WTL::CString,还是ATL::CString。其实你跟本用不着用WTL::CString,它们根本上就是一样的。

避免这类错误的方法就是在atlapp.h前面包含atlstr.h,这个文件里面定义的__ATLSTR_H__和_WTL_USE_CSTRING起的作用是一样的,并且指定CString为ATL::CString,这样就不用包含atlmisc.h了。atlmisc.ht提供的CSize, CPoint,CRect用WindowsAPI来代替也不见得多麻烦。

当然,你也可以把CString从atlmisc.h中移走,不过这有点侵犯别人劳动成功的嫌疑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值