Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| - C++

20.11.2014, 09:21. Просмотров 789. Ответов 13
Метки нет (Все метки)

error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Ругается на строку
C++
1
 Log<<StripXML(__PRETTY_FUNCTION__)<<std::endl;
. Функция такая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        std::string                    StripXML                                              (const std::string  &Text            )
{
 std::string Result;
 size_t      i;
 size_t      L;
 Result=Text;
 for (L=Result.length(), i=Result.rfind('&'); i!=std::string::npos; i=Result.substr(0, i-1).rfind('&'))
 {
  Result=Result.substr(0, i)+"&amp;"+Result.substr(i+1, Result.length()-1);
 }
 for (i=Result.find(L, '<'); i!=std::string::npos; i=Result.find('<'))
 {
  Result=Result.substr(0, i)+"&lt;"+Result.substr(i+1, Result.length()-1);
 }
 for (i=Result.find(L, '>'); i!=std::string::npos; i=Result.find('>'))
 {
  Result=Result.substr(0, i)+"&gt;"+Result.substr(i+1, Result.length()-1);
 }
 return Result;
}
. Переменная объявлена так:
C++
1
std::wofstream Log("Log.txt");
.Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 09:21     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Посмотрите здесь:
C++ Error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::
IntelliSense: отсутствует оператор "<<", соответствующий этим операндам типы операндов: std::basic_ostream<char, std::char_traits<char> C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
C++ Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) C++
Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char C++
C++ Std::initializer_list wchar_t
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:36  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #2
Блин, хотел продолжить редактирование, чтоб вытянуть предыдущий пост со всеми тегами.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3642 / 1917 / 505
Регистрация: 18.10.2014
Сообщений: 3,480
20.11.2014, 09:36     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #3
Цитата Сообщение от taras atavin Посмотреть сообщение
Ругается на строку
Ей не нравится, что вы пытаетесь выдать обычную строку в широкий поток. Если заменить строку на широкую строку 'std::wstring', то все компилируется нормально.

С обычной строкой оно пытается пробовать всякие "левые" варианты оператора '<<', и останавливается на том, который требует rvalue reference первым аргументом. Поэтому такая ошибка.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:39  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #4
Все string заменил на wstring, теперь
error: invalid initialization of reference of type 'const wstring& {aka const std::basic_string<wchar_t>&}' from expression of type 'const char*'|
. На ту же строку.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 09:40     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #5
C++
1
std::ofstream Log("Log.txt");
Так ошибка остаётся?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:45  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #6
При этом
C++
1
Log<<"fds";
в тот же широкий поток проходит.

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Так ошибка остаётся?
Так будут другие ошибки при выводе широких строк.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3642 / 1917 / 505
Регистрация: 18.10.2014
Сообщений: 3,480
20.11.2014, 09:47     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #7
Цитата Сообщение от taras atavin Посмотреть сообщение
в тот же широкий поток проходит
Да, стандарт открытым текстом пишет, что такие перегрузки оператора '<<' для 'basic_ostream' имеются. А вот перегрузки для 'basic_string' требуют совпадения типа символа.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 09:50     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Так будут другие ошибки при выводе широких строк.
Логично.
А есть причины использовать именно "широкие" строки? Просто у тебя в будущем будет меньше проблем если ты будешь использовать обычные.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:05  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #9
Есть.

Добавлено через 16 секунд
Цитата Сообщение от castaway Посмотреть сообщение
Просто у тебя в будущем будет меньше проблем если ты будешь использовать обычные.
Больше. Их вообще будет не разгрести. Называется ад кодировок.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:14     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #10
Цитата Сообщение от taras atavin Посмотреть сообщение
больше.
У тебя в любом случае будет больше проблем. Ты сам их себе создаёшь.
Как на счет этого сообщения: Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64? ?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:16  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #11
Ну с этим то я уже разобрался. А вот одновременная поддержка анси, кои8, 866 и ещё кучи других кодировок, больше 90 % которых я просто не знаю даже по названиям, - это действительно проблема.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:22     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #12
Ты пишешь лог всегда в одной кодировке. Зачем тебе UNICODE?
Может я чего не понимаю, объясни.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:33  [ТС]     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #13
1. Откуда я знаю, какая кодировка будет у пользователя и как из неё преобразовать в эту одну?
2. Дело не только логе. Широкий лог потянулся за выводом в него строчного данного, являющегося частью документа, а оно может быть у одного юзверя в window1251, у другого в windows1253, у третьего в windows1255, а проблема появится, когда четвёртый попытается импортировать их файлы при системной кодировке windows1250 и слепить свою строку из фрагментов импортированных строк. Мне что за каждым символом таскать обозначение кодировки?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 10:55     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Еще ссылки по теме:
Std::allocator<wchar_t>>' to 'LPCWSTR' C++
C++ Std::wostream не выводит wchar_t
C++ Неправильно сравнивает строки wchar_t* и std::wstring
Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" C++
C++ Cannot convert 'wchar_t &' to 'const char *'

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:55     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'| #14
Когда на вопрос ответишь?
Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64?
Yandex
Объявления
20.11.2014, 10:55     Error: cannot bind 'std::basic_ostream<wchar_t>' lvalue to 'std::basic_ostream<wchar_t>&&'|
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru