我有这个检查,当我试图获取用户名时,它表示没有可接受的从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}}
但我收到错误“非法间接”
答案 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()