issue when using boost::tokensizer with std::wstring.

Hi: I'm trying to use boost::tokenizer and have included boost/tokenizer.hpp. I get the errors below when trying to compile the following code: std::wstring TokensStr(Item); boost::tokenizer<> Tokens(TokensStr); Item, is defined as a BSTR. the errors are: 1>c:\program files\boost\boost\tokenizer.hpp(59): 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> &' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] and [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] Reason: cannot convert from 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' to 'const std::_String_const_iterator<_Elem,_Traits,_Alloc>' with [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called d:\work\access for everyone\sibelius access\sibeliusaccessserver\sibeliusaccess.cpp(231) : see reference to function template instantiation 'boost::tokenizer<>::tokenizer<std::wstring>(const Container &)' being compiled with [ Container=std::wstring ] 1>c:\program files\boost\boost\tokenizer.hpp(59): 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> &' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] and [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] Reason: cannot convert from 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' to 'const std::_String_const_iterator<_Elem,_Traits,_Alloc>' with [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called Does anyone know how I can solve these errors. Any help appreciated. Regards Sean.

I get the errors below when trying to compile the following code:
std::wstring TokensStr(Item);
boost::tokenizer<> Tokens(TokensStr);
Item, is defined as a BSTR.
the errors are:
tokenizer<char_delimiters_separator<wchar_t> >

Hi: Ok, This is still not working, I now have: std::wstring TokensStr(Item); boost::char_delimiters_separator<wchar_t> sep; boost::tokenizer<boost::char_delimiters_separator<wchar_t> > tok(TokensStr); I now have the errors: 1>c:\program files\boost\boost\tokenizer.hpp(59): 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> &' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] and [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] Reason: cannot convert from 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' to 'const std::_String_const_iterator<_Elem,_Traits,_Alloc>' with [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called d:\work\access for everyone\sibelius access\sibeliusaccessserver\sibeliusaccess.cpp(232) : see reference to function template instantiation 'boost::tokenizer<TokenizerFunc>::tokenizer<std::wstring>(const Container &)' being compiled with [ TokenizerFunc=boost::char_delimiters_separator<wchar_t>, Container=std::wstring ] 1>c:\program files\boost\boost\tokenizer.hpp(59): 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> &' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] and [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] Reason: cannot convert from 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' to 'const std::_String_const_iterator<_Elem,_Traits,_Alloc>' with [ _Elem=wchar_t, _Traits=std::char_traits<wchar_t>, _Alloc=std::allocator<wchar_t> ] and [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called Any help appreciated, boost 1.45 fyi. Regards Sean. -----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Igor R Sent: 17 January 2011 17:45 To: boost-users@lists.boost.org Subject: Re: [Boost-users] issue when using boost::tokensizer with std::wstring.
I get the errors below when trying to compile the following code:
std::wstring TokensStr(Item);
boost::tokenizer<> Tokens(TokensStr);
Item, is defined as a BSTR.
the errors are:
tokenizer<char_delimiters_separator<wchar_t> > _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Ok, This is still not working, I now have: std::wstring TokensStr(Item); boost::char_delimiters_separator<wchar_t> sep; boost::tokenizer<boost::char_delimiters_separator<wchar_t> > tok(TokensStr); I now have the errors:
Well, I don't understand the motivation behind this, but it appears that tokenizer template is declared as follows: template < typename TokenizerFunc = char_delimiters_separator<char>, typename Iterator = std::string::const_iterator, typename Type = std::string
class tokenizer; So you have to pass all the 3 params explicitly: boost::tokenizer<boost::char_delimiters_separator<wchar_t>, std::wstring::const_iterator, std::wstring> tok(TokensStr);
participants (2)
-
Igor R
-
Sean Farrow