如题

解决方案 »

  1.   

    CString只重载了以下的+运算,如果类型都不符合的话,就报C2678错误了。CString AFXAPI operator+(const CString& string1, const CString& string2)
    CString AFXAPI operator+(const CString& string, LPCTSTR lpsz)
    CString AFXAPI operator+(LPCTSTR lpsz, const CString& string)
      

  2.   

    CString 型和 char* 类型的相互转化  这是初学者使用 CString 时最常见的问题。有了 C++ 的帮助,很多问题你不需要深入的去考虑它,直接拿来用就行了,但是如果你不能深入了解它的运行机制,又会有很多问题让你迷惑,特别是有些看起来没有问题的代码,却偏偏不能正常工作。
    比如,你会奇怪为什么不能写向下面这样的代码呢:CString graycat = "Gray" + "Cat";
    或者这样:CString graycat("Gray" + "Cat");
      事实上,编译器将抱怨上面的这些尝试。为什么呢?因为针对CString 和 LPCTSTR数据类型的各种各样的组合,“ +” 运算符 被定义成一个重载操作符。而不是两个 LPCTSTR 数据类型,它是底层数据类型。你不能对基本数据(如 int、char 或者 char*)类型重载 C++ 的运算符。你可以象下面这样做:CString graycat = CString("Gray") + CString("Cat");
    或者这样:CString graycat = CString("Gray") + "Cat";
    研究一番就会发现:“ +”总是使用在至少有一个 CString 对象和一个 LPCSTR 的场合。注意,编写有 Unicode 意识的代码总是一件好事,比如:CString graycat = CString(_T("Gray")) + _T("Cat");
    这将使得你的代码可以直接移植。
    -------------------纯洁的分割线------------------------
    以上摘自vc知识库的文章
    CString 操作指南
    原著:Joseph M. Newcomer翻译:littleloach原文出处:codeproject:CString Management