if (agvs[i].battery_ < 100) { auto i_copy = std::move(agvs[i]); std::thread charge_thread([i_copy]() { agv_charge(i_copy); // 在线程结束时运行moveAgvs(i) moveAgvs(i_copy); }); charge_thread.detach(); },報錯: agv_charge需要編譯器取this
时间: 2024-02-14 09:06:29 浏览: 55
AGVS.rar_AGVS调度_gulf5j4_scheduling AGV_wpf agv调度系统_调度控制
5星 · 资源好评率100%
如果 `agv_charge` 函数是在类中定义的,那么它需要访问类的成员变量或者调用类的成员函数时,就需要编译器传递 `this` 指针。因此,在 lambda 表达式中调用 `agv_charge` 函数时,也需要传递 `this` 指针。
例如,如果 `agv_charge` 函数定义在名为 `AGV` 的类中,可以将代码修改为:
```
if (agvs[i].battery_ < 100) {
auto i_copy = std::move(agvs[i]);
std::thread charge_thread([this, i_copy]() {
agv_charge(i_copy);
// 在线程结束时运行moveAgvs(i)
moveAgvs(i_copy);
});
charge_thread.detach();
}
```
这里使用了 `[this, i_copy]` 捕获列表,将 `this` 指针和 `i_copy` 变量都传递给了 lambda 表达式。这样,在 lambda 表达式中就可以正常地调用 `agv_charge` 函数了。
阅读全文