2009-08-20 118 views
0

我保持在視覺工作室接受C2664轉換錯誤錯誤C2664從常量的std :: string轉換爲的std :: string&

它告訴我,它不能從常量性病轉換參數1 ::字符串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) 
{ 

} 

任何想法?

編輯:

我看,這是真的令人困惑所以我要解釋一點..

本來,我想要的是裏面的這些線環

ch = someFunction(*tok_iter); 
h += ch 

我也期待* tok_iter返回一個wstring,但我得到一個錯誤,如:無法將參數1從const std :: string轉換爲const std :: wstring &

因此,我認爲,* tok_iter是一個const std :: string,因此我創建了一個stringToWstring函數來完成轉換。要爲循環

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

什麼「粗體部分」? – 2009-08-20 18:06:20

+0

爲什麼你問關於將字符串轉換爲wstring,如果錯誤談到const字符串字符串&? – jalf 2009-08-20 18:07:01

+0

周圍有雙星號的部分,如果不在代碼塊中,則會加粗。 – chaos 2009-08-20 18:07:21

回答

2

看着編輯的問題,你的錯誤是boost/tokenizer.hpp,而不是在指定的行。

所以我的猜測是你的tokenizer是錯誤的。查看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會告訴你在模板中有使用的類型,可讓您從第二const std::_String_const_iterator<_Elem,_Traits,_Alloc> &區分錯誤消息的第一std::_String_const_iterator<_Elem,_Traits,_Alloc>(VC++真的不格式化這個信息非常好,但它的存在)

最很有可能,其中一個char_Elem,另一個爲wchar_t

+0

嘿,我編輯了這個問題,希望現在更清楚 – 2009-08-20 18:33:01

+0

謝謝,那工作:) – 2009-08-20 18:49:10

1

我認爲tokenizer迭代器實際上會返回一個wstring,而不是一個字符串。您期望stringToWstring函數中有一個字符串(引用)。

或者您應該將標記器的模板類型從wchar_t更改爲char。我無法確切地說,沒有代碼的上下文...

相關問題