void assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs);怎麽修改: threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::vector<Task>& tasks, std::vector<AGV>& agvs));
时间: 2024-01-19 12:05:12 浏览: 65
在创建新的线程时,需要将函数的参数直接传递给 `std::thread` 构造函数,不需要在参数类型前面加上参数名。因此,正确的写法应该是:
```
threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs)));
```
这样就可以将 `tasks` 和 `agvs` 作为参数传递给 `AGVScheduler::assign_task_to_agv` 函数,并在新的线程中运行该函数。注意,这里使用了 `std::ref` 来将 `tasks` 和 `agvs` 引用传递给线程,避免了拷贝。
相关问题
void AGVScheduler::assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs),threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, &agvScheduler, std::ref(tasks), std::ref(agvs)));,報錯:agvScheduler was not declared in this scope ,怎麽修改
这个错误提示说明在你的代码中,变量agvScheduler没有被声明或者定义。你需要先检查一下代码中是否有定义这个变量,如果没有则需要先进行定义。
如果你已经定义了这个变量,但是仍然报错,可能是因为你的代码中的变量作用域不够,导致编译器无法识别它。这时,你可以尝试将定义变量的位置移动到更高的作用域,或者将变量定义为全局变量。
如果以上方法都无法解决问题,还需要进一步检查代码,确定是否存在其他语法错误或者逻辑错误。
void assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs);,void MainWindow::moveAgvs(int i),void MainWindow::action_agv() { std::vectorstd::thread threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(& MainWindow::moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); ,報錯:no matching function for call to “std:: thread :: _ lnvoker<std::tuple<std::tuple<void(AGVScheduler::*)(std::vector<Task>)...怎麽修改
这个错误通常是由于函数指针类型不匹配导致的。在这段代码中,错误可能是由于 `AGVScheduler::assign_task_to_agv` 函数的类型与 `std::thread` 构造函数所需的类型不匹配。
请检查 `AGVScheduler::assign_task_to_agv` 函数的类型,确保其与 `std::thread` 构造函数所需的类型一致。由于 `AGVScheduler::assign_task_to_agv` 是一个成员函数,因此需要使用类的指针或引用来调用该函数。正确的写法应该是:
```
threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, &agvScheduler, std::ref(tasks), std::ref(agvs)));
```
这样就可以将 `agvScheduler` 对象、`tasks` 和 `agvs` 作为参数传递给 `AGVScheduler::assign_task_to_agv` 函数,并在新的线程中运行该函数。注意,这里使用了 `&agvScheduler` 来传递 `AGVScheduler` 对象的指针,同时使用了 `std::ref` 来将 `tasks` 和 `agvs` 引用传递给线程,避免了拷贝。
阅读全文