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

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

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1753 / 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. Просмотров 868. Ответов 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>&&'|
0
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:: - C++
Здравствуйте! Сразу попрошу прощения за тупой вопрос. Почему при перегрузке operator &lt;&lt; код template&lt;class T&gt; ostream &amp;operator &lt;&lt;...

IntelliSense: отсутствует оператор "<<", соответствующий этим операндам типы операндов: std::basic_ostream<char, std::char_traits<char> - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct Stydent { std::string faculty; int rate; ...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &' - C++
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace std; int main() { string...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char - C++
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении имени.Знаю,что код можно было написать проще...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:36  [ТС] #2
Блин, хотел продолжить редактирование, чтоб вытянуть предыдущий пост со всеми тегами.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3827 / 2085 / 532
Регистрация: 18.10.2014
Сообщений: 3,699
20.11.2014, 09:36 #3
Цитата Сообщение от taras atavin Посмотреть сообщение
Ругается на строку
Ей не нравится, что вы пытаетесь выдать обычную строку в широкий поток. Если заменить строку на широкую строку 'std::wstring', то все компилируется нормально.

С обычной строкой оно пытается пробовать всякие "левые" варианты оператора '<<', и останавливается на том, который требует rvalue reference первым аргументом. Поэтому такая ошибка.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:39  [ТС] #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*'|
. На ту же строку.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 09:40 #5
C++
1
std::ofstream Log("Log.txt");
Так ошибка остаётся?
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 09:45  [ТС] #6
При этом
C++
1
Log<<"fds";
в тот же широкий поток проходит.

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Так ошибка остаётся?
Так будут другие ошибки при выводе широких строк.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3827 / 2085 / 532
Регистрация: 18.10.2014
Сообщений: 3,699
20.11.2014, 09:47 #7
Цитата Сообщение от taras atavin Посмотреть сообщение
в тот же широкий поток проходит
Да, стандарт открытым текстом пишет, что такие перегрузки оператора '<<' для 'basic_ostream' имеются. А вот перегрузки для 'basic_string' требуют совпадения типа символа.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 09:50 #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Так будут другие ошибки при выводе широких строк.
Логично.
А есть причины использовать именно "широкие" строки? Просто у тебя в будущем будет меньше проблем если ты будешь использовать обычные.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:05  [ТС] #9
Есть.

Добавлено через 16 секунд
Цитата Сообщение от castaway Посмотреть сообщение
Просто у тебя в будущем будет меньше проблем если ты будешь использовать обычные.
Больше. Их вообще будет не разгрести. Называется ад кодировок.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:14 #10
Цитата Сообщение от taras atavin Посмотреть сообщение
больше.
У тебя в любом случае будет больше проблем. Ты сам их себе создаёшь.
Как на счет этого сообщения: Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64? ?
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:16  [ТС] #11
Ну с этим то я уже разобрался. А вот одновременная поддержка анси, кои8, 866 и ещё кучи других кодировок, больше 90 % которых я просто не знаю даже по названиям, - это действительно проблема.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:22 #12
Ты пишешь лог всегда в одной кодировке. Зачем тебе UNICODE?
Может я чего не понимаю, объясни.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.11.2014, 10:33  [ТС] #13
1. Откуда я знаю, какая кодировка будет у пользователя и как из неё преобразовать в эту одну?
2. Дело не только логе. Широкий лог потянулся за выводом в него строчного данного, являющегося частью документа, а оно может быть у одного юзверя в window1251, у другого в windows1253, у третьего в windows1255, а проблема появится, когда четвёртый попытается импортировать их файлы при системной кодировке windows1250 и слепить свою строку из фрагментов импортированных строк. Мне что за каждым символом таскать обозначение кодировки?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.11.2014, 10:55 #14
Когда на вопрос ответишь?
Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 10:55
Привет! Вот еще темы с ответами:

Std::initializer_list wchar_t - C++
Подскажите, не удаётся сделать функцию добавления в массив wchar_t template&lt;class T0, class T1&gt; void add_to_array(T0* arr,...

Std::allocator<wchar_t>>' to 'LPCWSTR' - C++
собственно есть list&lt;wstring&gt; куда вставили много адресов типа L&quot;D:\\66\\99&quot;; Задача удалять папки по этому адресу (пока что папки пусты...

Std::wostream не выводит wchar_t - C++
Здравствуйте. Есть кусочек кода для записи в файл. Перед ним еще похожий кусочек записывает данные из другого класса(только числа с...

Неправильно сравнивает строки wchar_t* и std::wstring - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; wchar_t str =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.11.2014, 10:55
Ответ Создать тему
Опции темы

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