Ошибка компилятора C3493: «func» не может быть захвачен неявно, потому что не задан режим захвата по умолчанию - PullRequest
38 голосов
/ 30 ноября 2010

Можете ли вы помочь мне решить эту ошибку компилятора?

template<class T>
static void ComputeGenericDropCount(function<void(Npc *, int)> func)
{
    T::ForEach([](T *what) {
        Npc *npc = Npc::Find(what->sourceId);

        if(npc)
            func(npc, what->itemCount); // <<<<<<< ERROR HERE
            // Error    1   error C3493: 'func' cannot be implicitly captured because no default capture mode has been specified

    });
}

static void PreComputeNStar()
{
     // ...
    ComputeGenericDropCount<DropSkinningNpcCount>([](Npc *npc, int i) { npc->nSkinned += i; });
    ComputeGenericDropCount<DropHerbGatheringNpcCount>([](Npc *npc, int i) { npc->nGathered += i; });
    ComputeGenericDropCount<DropMiningNpcCount>([](Npc *npc, int i) { npc->nMined += i; });
}

Я не могу понять, почему это дает мне ошибку, и я не знаю, как ее исправить. ComputeGenericDropCount(auto func) тоже не работает.

1 Ответ

65 голосов
/ 30 ноября 2010

Вам нужно указать, как захватить func в лямбду.

[] ничего не захватывать

[&] захват по ссылке

[=] захват по значению (копия)

T::ForEach([&](T *what) {

Я бы также порекомендовал вам отправить func по константной ссылке.

static void ComputeGenericDropCount(const function<void(Npc *, int)>& func)
...