-------------------------------------------------------------------- CString wo("xxxxcc"); string s; s=wo.GetBuffer();//失败了!!!//错误信息1>f:\c++试验\count_machine\count_machine\count_machinedlg.cpp(185) : error C2679: 二进制“=”: 没有找到接受“wchar_t *”类型的右操作数的运算符(或没有可接受的转换)1> f:\vs 2005 主程序目录\vc\include\xstring(875): 可能是“std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const std::basic_string<_Elem,_Traits,_Ax> &)”1> with1> [1> _Elem=char,1> _Traits=std::char_traits<char>,1> _Ax=std::allocator<char>1> ]1> f:\vs 2005 主程序目录\vc\include\xstring(880): 或“std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const _Elem *)”1> with1> [1> _Elem=char,1> _Traits=std::char_traits<char>,1> _Ax=std::allocator<char>1> ]1> f:\vs 2005 主程序目录\vc\include\xstring(885): 或“std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(_Elem)”1> with1> [1> _Elem=char,1> _Traits=std::char_traits<char>,1> _Ax=std::allocator<char>1> ]1> 试图匹配参数列表“(std::string, wchar_t *)”时-------------------------------------------------------------------- CString wo("xxxxcc"); string s(wo.GetBuffer());//失败了//错误信息1>f:\c++试验\count_machine\count_machine\count_machinedlg.cpp(184) : error C2664: “std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::allocator<_Ty> &)”: 不能将参数 1 从“wchar_t *”转换为“const std::allocator<_Ty> &”1> with1> [1> _Elem=char,1> _Traits=std::char_traits<char>,1> _Ax=std::allocator<char>,1> _Ty=char1> ]1> and1> [1> _Ty=char1> ]1> 原因如下: 无法从“wchar_t *”转换为“const std::allocator<_Ty>”1> with1> [1> _Ty=char1> ]1> 无构造函数可以接受源类型,或构造函数重载决策不明确-------------------------------------------------------------------//还有 我把CString所有的成员函数都看了一遍,没有一个的返回值是string的//那如何才能实现CString到 string的转换啊?//如果能把CString转成string的话 我就可以有很多处理可以做,//因为学C++的时候都是用string的回messageboxa:出错!!!!
错误的原因错误信息已经说明了,CString缓冲区的字符串采用的是UNICODE的占16位的字符,而string中的是占8位的ANSI标准字符。有2个方法解决:1、使用转换函数char *chr=new char[wo.GetLength()]WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);string str=chr;2、推荐你使用string的宽字符版本wstring,它的成员函数和string几乎一模一样,你肯定会使用wstring str=wo.GetLength();
1.string s = (LPCTSTR)str; 2.char *chr=new char[wo.GetLength()]WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);string str=chr;3.#include<stdlib.h> #include<tchar.h> _T("dsfds");这三种方法都试试我就不信没一个成的