编译器错误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)也不工作。

你需要指定如何捕捉到lambda的func

[]不捕捉任何东西

[&]通过引用捕获

[=]按价值捕捉(复制)

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

我也build议你应该通过const引用发送func

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