@MasterCopipaster

Почему возникает ошибка «cannot be implicitly captured because no default capture mode has been specified» при передачи в функцию?

Почему когда я пишу такой код возникает ошибка
bool f(char* buf, char* key_input) {
boost::beast::string_view key = std::string(key_input);
//todo 
        ws.set_option(websocket::stream_base::decorator([](websocket::request_type& req) {
            req.set("Api-Key", key);
            })
        );
//todo

C:\Project2.cpp(40,1): error C3493: 'key' cannot be implicitly captured because no default capture mode has been specified
C:\Project2.cpp(39,56): error C2440: '': cannot convert from 'int' to 'boost::beast::websocket::stream_base::decorator'
C:\Project2.cpp(41,14): message : No constructor could take the source type, or constructor overload resolution was ambiguous
Done building project "Project2.vcxproj" -- FAILED.


Но если я пишу так то все ок
ws.set_option(websocket::stream_base::decorator([](websocket::request_type& req) {
            req.set("Api-Key", "28369a57-7476-4d2c-9b9d-574d4282b428");
            })
        );

Если верить определению функции set
template<class Allocator>
void
basic_fields<Allocator>::
set(field name, string_view const& value)


или
template<class Allocator>
void
basic_fields<Allocator>::
set(string_view sname, string_view const& value)


Собственно почему это происходит и как исправить?
  • Вопрос задан
  • 351 просмотр
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Почитайте про Лямбды. Сообщение об ошибке вам четко говорит, что оно не может понять, что делать с переменной key, потому что не указан метод захвата по умолчанию и key не указана в списке захвата.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы