binary'=':找不到带有'std :: unique_ptr <char []类型的右手操作数的运算符,std :: default_delete <_ty =“”>&gt;'

时间:2016-01-20 18:41:33

标签: c++ winforms c++11

我有这个检查,当我试图获取用户名时,它表示没有可接受的从Unique_ptr到CString的转换。

这是我的代码:

std::unique_ptr<char[]> GetUsername() { return CStringUtils::Decrypt(username); }

CString user_name = NULL;

GetUsername的位置:

Error   C2679   binary '=': no operator found which takes a right-hand operand of type 'std::unique_ptr<char [],std::default_delete<_Ty>>' (or there is no acceptable conversion)

我需要user_name作为CString,因为在某些时候我需要将它附加到CString消息。

我在上面设置它的方式有什么问题?

这是我得到的错误:

user_name = *(cr.GetUsername());

编辑:

我按照评论中的说法尝试了这个解决方案:

{{1}}

但我收到错误“非法间接”

1 个答案:

答案 0 :(得分:2)

问题的根源可能是CString类型;你得到的错误信息是说CString的实现者没有定义operator=unique_ptr<char[]>分配CString对象。

基于一些快速谷歌搜索,我猜你的CString类型是this one,因为它来自Microsoft库,你说你正在使用WinForms。根据文档,您只能将原始指针的CString分配给char数组,即const unsigned char*。因此,要将GetUsername()的结果分配给您的CString user_name,您需要从unique_ptr获取基础原始指针:

user_name = cr.GetUsername().get()