在做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_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中移走,不过这有点侵犯别人劳动成功的嫌疑。