错误C2664从const std :: string转换为std :: string&

时间:2009-08-20 18:04:34

标签: c++ visual-c++

我在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

我希望现在更清楚了。

2 个答案:

答案 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。没有代码上下文,我无法确切地说出来......