error C2664: 'CCertStoreHelper::DeleteCtl' : cannot convert parameter 1 from 'const std::basic_string<_Elem,_Traits,_Ax>' to 'std::wstring &error C2664: 'CCertStoreHelper::DeleteCtl' : cannot convert parameter 1 from 'const std::basic_string<_Elem,_Traits,_Ax>' to 'std::wstring &
with
[
_Elem=wchar_t,
_Traits=std::char_traits<wchar_t>,
_Ax=std::allocator<wchar_t>
]
Conversion loses qualifiers
我不知道这个。所以请提供解决方案。
代码:
CCertStoreHelper certCaStore;
std::set<std::wstring> ctlIdentifiersToRemove; // It populates data which I m not mentioning
std::set<std::wstring>::iterator iter1;
std::set<std::wstring>::iterator iter2;
for(iter1 = ctlIdentifiersToRemove.begin(); iter1 != ctlIdentifiersToRemove.end(); iter1++)
{
iter2 = ctlIdentifiersReferenced.find((*iter1));
if(iter2 == ctlIdentifiersReferenced.end())
{
if(certCaStore.DeleteCtl((*iter1))) // error line
{
// ...
}
}
}
// prototype for DeleteCtl fun is
bool CCertStoreHelper::DeleteCtl(std::wstring &ctlIdentifier)
请告诉我我做错了什么 感谢
答案 0 :(得分:2)
正如twalberg所指出的,编译器错误消息中最重要的一点是“丢失限定符”位。它还告诉您,它无法从const std::wstring
转换为std::wstring&
,只是它将第一个std::wstring
扩展为完整的模板实例化表单。
问题是你的DeleteCtl
通过非const引用接受参数,好像它想要在那里修改字符串(坏主意),但它不能这样做,因为你正在迭代一个集合,一旦他们在那里就不能更改集合的成员(std::set
在const_iterator
和iterator
之间没有区别。原因是std::set
将其内部结构基于其元素的值,如果更改这些值,内部结构将变为无效,并且会发生可怕的事情。