Я пытаюсь разбить строку, используя метод, найденный в этой теме , но я пытаюсь адаптировать ее к wstring. Однако я наткнулся на странную ошибку. Проверьте код:
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main(void)
{
wstring str(L"Börk börk");
wistringstream iss(str);
vector<wstring> tokens;
copy(istream_iterator<wstring>(iss), // I GET THE ERROR HERE
istream_iterator<wstring>(),
back_inserter< vector<wstring> >(tokens));
return 0;
}
Точное сообщение об ошибке:
error: no matching function for call to 'std::istream_iterator<std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, char, std::char_traits<char>, int>::istream_iterator(std::wistringstream&)'
Я думаю, это говорит о том, что он не может создать экземпляр istream_iterator, используя переданный iss
(который является потоком w istringstream вместо istringstream). Это на Mac с использованием XCode и GCC 4.2. А на AFAIK нет wistring_iterator или чего-то в этом роде.
Отлично работает, когда я использую версию без wstring. Как вы могли заметить, я изменил объявления для использования wstring
, wistringstream
s и vector<wstring>
, просто заменил все, чтобы использовать широкую версию.
Что может вызвать это и почему он не принимает версию wstring?