web-dev-qa-db-ja.com

コンパイラエラーC3493:デフォルトのキャプチャモードが指定されていないため、 'func'を暗黙的にキャプチャできません

このコンパイラエラーの解決を手伝っていただけますか?

_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)も機能しません。

38
Thomas Bonini

funcをラムダに取り込む方法を指定する必要があります。

[]何もキャプチャしないでください

[&]参照によるキャプチャ

[=]値によるキャプチャ(コピー)

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

また、funcをconst参照で送信することをお勧めします。

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