‘this’ was not captured for this lambda function
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.65] |
|
|
‘this’ was not captured for this lambda function
|
Сообщ.
#1
,
|
|
|
|
Код такой:
![]() ![]() void BitOStream::WriteString(std::string str) { for_each(str.begin(), str.end(), [](char c) { WriteByte(c); } ); } Компилятор(g++ 4.5) выдает: ![]() ![]() BitOStream.cpp: In lambda function: BitOStream.cpp:45:3: ошибка: ‘this’ was not captured for this lambda function make: *** [flactrim] Ошибка 1 WriteByte это приватный метод того же класса: ![]() ![]() void WriteByte(uint8_t byte, unsigned short bitCount = BITSINBYTE); Как исправить ошибку? |
|
Сообщ.
#2
,
|
|
|
|
Цитата miksayer @ void BitOStream::WriteString(std::string str) { for_each(str.begin(), str.end(), [this](char c) { WriteByte©; } ); } и твой код будет мягким и шелковистым. |
|
Сообщ.
#3
,
|
|
|
|
Цитата Flex Ferrum @ и твой код будет мягким и шелковистым. спасибо хочу еще посоветоваться. Что лучше в этом случае использовать: лямбда-выражение, как сделано выше или определить еще один вариант функции WriteByte, чтобы она могла принимала char и передавать уже ее? Добавлено и, кстати, зачем здесь указывать this в квадратных скобках? т.е. мы говорим компилятору, что мы планируем работать с this в самом выражении? |
|
Сообщ.
#4
,
|
|
|
|
Цитата miksayer @ и, кстати, зачем здесь указывать this в квадратных скобках? т.е. мы говорим компилятору, что мы планируем работать с this в самом выражении? В квадратных скобках указывается т. н. "capture-list" - перечень переменных, видимых в контексте определения лямбда-функции, который должен быть доступен в её теле. Ты перечисляешь либо конкретные переменные, либо используешь специальные формы: [=] - все переменные будут доступны по значению. [&] - все переменные будут доступны по ссылке. Если оставляешь пустым, то из контекста определения ничего не будет "захвачено". |
|
Сообщ.
#5
,
|
|
|
|
спасибо
|