Compiler error C3493: 'func' cannot be implicitly captured because no default capture mode has been specified
26,763
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)
Author by
Andreas Bonini
Updated on January 01, 2020Comments
-
Andreas Bonini over 4 years
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. -
Andreas Bonini over 13 yearsThis doesn't work and gives me the same error; also I thought that
[]
means "capture nothing";[&]
means "capture all upvalues by reference,[*]
means "capture all upvalues by copy", and so on.. But I think this only affects how upvalues are captured, ie, it will only affect code inside the lambda -
ronag over 13 yearsYou need to capture func in-order to use it inside the lambda, which you do. I don't see how you could get the same error. I'll try it myself once i get home.
-
Andreas Bonini over 13 yearsSorry! I added the
&
to the wrong lambdas, the callbacks fromComputeGenericDropCount
, instead ofForEach
, as you said. Now everything makes sense: it needed to know how to capture func, of course!! Thanks again. -
DawnSong about 8 years
&
is what I need. Thanks