我在visual studio中一直收到C2664转换错误
它告诉我它不能将参数1从const std :: string转换为std :: string&。我尝试在stringToWstring原型和函数本身中添加/删除const,但错误仍然存在。
wstring hexval = buff.substr(buff.find(L"hex(2):"));
wstring h;
wchar_t ch;
typedef boost::tokenizer<boost::char_separator<wchar_t> > tokenizer;
boost::char_separator<wchar_t> sep(L"//,");
tokenizer tokens(hexval, sep);
for(tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); tok_iter++)
{
ch = someFunction(*tok_iter); //error here
h += ch;
}
wstring stringToWstring(const string& s)
{
wstring temp(s.length(), L'');
copy(s.begin(), s.end(), temp.begin());
return temp;
}
wchar_t someFunction(const wstring &hex_val)
{
}
有什么想法吗?
编辑:
我看到这真的令人困惑所以我要解释一下......
最初,我想要的是for循环中的这些行
ch = someFunction(*tok_iter);
h += ch
我还希望* tok_iter返回一个wstring,但我收到的错误如下:无法将参数1从const std :: string转换为const std :: wstring&amp;
因此,我假设不知何故,* tok_iter是一个const std :: string因此,我创建了一个stringToWstring函数来进行转换。要在for循环中执行此操作
ch = someFunction(stringToWstring(*tok_iter));
h += ch
当我这样做时,我得到了:
Error 1 error C2664: 'std::_String_const_iterator<_Elem,_Traits,_Alloc>::_String_const_iterator(const std::_String_const_iterator<_Elem,_Traits,_Alloc> &)' : cannot convert parameter 1 from 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' to 'const std::_String_const_iterator<_Elem,_Traits,_Alloc> &' c:\program files\boost\boost_1_39\boost\tokenizer.hpp 63
我希望现在更清楚了。
答案 0 :(得分:2)
查看已修改的问题,您的错误位于boost/tokenizer.hpp
内,而不是指定的行。
所以我的猜测是你的标记器错了。查看http://www.boost.org/doc/libs/1_34_0/libs/tokenizer/tokenizer.htm它需要三个模板参数,第三个默认为std::string
。既然你想在std::wstring
上使用它,我会说你应该像这样创建你的标记器:
tokenizer<boost::char_separator<wchar_t>, std::wstring::const_iterator, std::wstring>
通常,在调试模板类型中的错误时,请务必查看“输出”窗格中错误后面的行。 Visual Studio将告诉您模板中使用的类型,允许您区分错误消息中的第一个std::_String_const_iterator<_Elem,_Traits,_Alloc>
和第二个const std::_String_const_iterator<_Elem,_Traits,_Alloc> &
(VC ++在格式化此信息方面确实不是很好,但是它在那里)
最有可能的情况是,其中一个char
_Elem
,另一个wchar_t
。
答案 1 :(得分:1)
我认为tokenizer迭代器实际上返回一个wstring,而不是一个字符串。您期望stringToWstring函数中的字符串(引用)。
或者您应该将tokenizer的模板类型从wchar_t更改为char。没有代码上下文,我无法确切地说出来......