Не удается создать экземпляр istring_iterator с использованием потока wistring - PullRequest
3 голосов
/ 20 сентября 2010

Я пытаюсь разбить строку, используя метод, найденный в этой теме , но я пытаюсь адаптировать ее к 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?

1 Ответ

5 голосов
/ 20 сентября 2010

В последней части сообщения об ошибке вы должны переопределить параметры 2 и 3 по умолчанию в istream_iterator (), чтобы соответствовать использованию widechar в других местах.В Visual C ++ эта версия компилируется нормально для меня:

copy(istream_iterator<wstring, wchar_t, std::char_traits<wchar_t> >(iss), // I DO NOT GET THE ERROR HERE
    istream_iterator<wstring, wchar_t, std::char_traits<wchar_t> >(),
    back_inserter< vector<wstring> >(tokens));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...