2013-09-12 2 views
1

Я пытался адаптировать this, чтобы распечатать содержимое std::vector<std::wstring>, используя std :: copy, но я не понимаю, как этот код работает достаточно хорошо, и может 'получить его для компиляции. Каким должен быть код?Распечатайте std :: vector <std :: wstring>

Я использовал пример Роба, но он не работает:

std::vector<std::wstring> keys = ...; 
std::copy(keys.begin(), keys.end(), std::ostream_iterator<std::wstring>(std::wcout, " ")); 

Я получаю ошибку:

1>error C2665: 'std::ostream_iterator<_Ty>::ostream_iterator' : none of the 2 overloads could convert all the argument types 
1>  with 
1>  [ 
1>   _Ty=std::wstring 
1>  ] 
1>  C:\Program Files\Microsoft Visual Studio 8\VC\include\iterator(300): could be 'std::ostream_iterator<_Ty>::ostream_iterator(std::basic_ostream<_Elem,_Traits> &,const _Elem *)' 
1>  with 
1>  [ 
1>   _Ty=std::wstring, 
1>   _Elem=char, 
1>   _Traits=std::char_traits<char> 
1>  ] 
1>  while trying to match the argument list '(std::wostream, const char [2])' 

Почему говоря мне _Elem=char, когда я использую wcout, который имеет тип wostream?

+1

Просьба примера кода и информации о сообщении об ошибке демонстрирует проблему , – BartoszKP

ответ

5

Вы должны использовать wstring, wchar_t в качестве параметров шаблона и wcout в качестве выходного потока:

std::copy(v.begin(), 
      v.end(), 
      std::ostream_iterator<std::wstring, wchar_t>(std::wcout, L"\n")); 

Программа испытаний:

#include <vector> 
#include <string> 
#include <iostream> 
#include <iterator> 

int main() { 
    std::vector<std::wstring> v; 
    v.push_back(L"Hello"); 
    v.push_back(L"World"); 
    std::copy(v.begin(), 
      v.end(), 
      std::ostream_iterator<std::wstring, wchar_t>(std::wcout, L"\n")); 
} 
+2

'' \ n "' тоже не должен быть широким? –

+0

Это не работает для меня. Я понял, что не упомянул, что использую VC++ 2K5, если есть известный глюк ... –

+0

@ Джон - извините за плохой совет. Попробуй это. –

Смежные вопросы