Ошибка C2679 при попытке использовать std :: wcout << wstring-var; vc ++ 2008 express - PullRequest
12 голосов
/ 17 сентября 2009

При попытке вывести wstring в vc ++ 2008 express появляется довольно странное сообщение об ошибке:

ошибка C2679: двоичный файл «<<»: не найден оператор, который принимает правый операнд типа «std :: wstring» (или нет допустимого преобразования) </p>

Если я правильно понимаю, это сообщает, что wcout не принимает wstring? Я прошу кого-то скомпилировать этот код под Linux, и он работает нормально. Я также попробовал тот же код на другом компьютере с vc ++ 2008 express и все еще не удается. Известная проблема с std в vc ++ 2008?

#include <iostream>

int main()
{
 std::wstring unicode_test = L"Unicode var";
 std::wcout << L"Unicode non-var" << std::endl;
 std::wcout << unicode_test << std::endl;    //<-- This line fails!
}

Я использую vc ++ 2008 express sp1 со всеми обновлениями до KB948127. Я знаю, что консоли понадобятся изменения кодовой страницы, но это даже не компиляция. Благодаря.

Ответы [ 2 ]

15 голосов
/ 17 сентября 2009

Вам нужно #include <string>. Я не уверен, что говорится в стандарте, но я совершенно уверен, что <iostream> не требуется для экспорта всех <string>, если таковые имеются.

[править] Как минимум cplusplus.com даже не перечисляет string как типы, объявленные в <iostream>. Нет, это не стандарт, я знаю ... [/ edit]

0 голосов
/ 15 апреля 2018

Для тех, у кого возникла эта проблема, вам может потребоваться включить многобайтовую печать в консоли. Смотрите ответ здесь: https://stackoverflow.com/a/41584090/1599699

И мой комментарий:

У меня возникли проблемы с печатью wstring, экземпляр которого я создал, с большей длиной, чем те данные, которые я предоставлял, из-за sizeof (wchar_t) == sizeof (char) * 2, а затем распечатка чего-либо после этого не удалась.

...