Ошибка: нет известного преобразования для аргумента 4 из «const ServerLogInfo» в «ServerLogInfo &» - PullRequest
1 голос
/ 25 февраля 2020
int AsyncParseInternal(const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
    auto func = [this, data, entries, num_dense, serverlog, timestamp]() {
        this->ParseInternal(data, entries, num_dense, serverlog, timestamp);
    };
    util::ThreadCaller::call_method(std::move(func));
    return 0;
}

int ParseInternal(
    const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
    ...
}

нет известного преобразования для аргумента 4 из 'const ServerLogInfo' в 'ServerLogInfo &'

1 Ответ

2 голосов
/ 25 февраля 2020

Обратите внимание:

void f(int&) {}

struct S {
  void operator()() const { f(x); }
  int x;
};

Не компилируется из-за пометки operator() const. Лямбды C ++ - это объекты функций с operator(), которые неявно помечены const.

. Чтобы получить не const operator(), необходимо пометить лямбду mutable. то есть

auto func = [...]() mutable { ... };
                    ^^^^^^^
...