编译器错误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)
- GCC编译错误> 2 GB的代码
- 由于其架构“XXX”不包含所有必需的体系结构,因此Pods被拒绝作为“libPods.a”的隐式依赖
- cc1plus:错误:无法识别的命令行选项“-std = c ++ 11”与g ++
- 为什么C#编译器允许在IEnumerable <T>和TAlmostAnything之间进行显式转换?
- 为C推荐的gcc警告选项
- C# – 不能隐式地将List <Product>转换为List <IProduct>
- Xcode 8.3 libMobileGestalt MobileGestaltSupport.m:153:
- 错误:安装脚本退出错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为1
- Javatypes推断:在Java 8中引用是不明确的,但不是Java 7