Compiler error C3493: 'func' cannot be implicitly captured because no default capture mode has been specified

匿名 (未验证) 提交于 2019-12-03 02:44:02

问题:

Can you help me resolve this compiler error?

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; }); } 

I can't understand why it's giving me the error and I don't know how to fix it. ComputeGenericDropCount(auto func) doesn't work either.

回答1:

You need to specify how to capture func into the lambda.

[] don't capture anything

[&] capture-by-reference

[=] capture-by-value (copy)

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

I'd also recommend that you should send func by const reference.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!