C++ std::thread调用静态成员函数报no matching function错误求解
错误原因
你要调用的Chronometer::start_chrono是静态成员函数,不需要像非静态成员函数那样额外传递类对象指针作为隐式this参数。你当前的代码多传入了car_crono[i]参数,导致传入参数数量和函数要求的参数数量不匹配,因此触发调用失败的编译错误。
修复方法
直接删除多余的car_crono[i]参数即可,修改后的线程创建代码如下:
std::thread(&Chronometer::start_chrono, std::ref(chrono));
额外注意事项
- 你当前创建的
std::thread是临时对象,销毁时如果线程还处于可结合状态会直接触发程序终止。建议将创建的线程对象存入std::vector<std::thread>容器中,后续在合适的时机调用join()等待线程执行结束,或者调用detach()将线程和对象分离。 start_chrono中包含while循环的话,需要做好线程退出逻辑控制,避免出现线程泄漏或者程序无法正常退出的问题。- 全局的
chrono对象会被多个线程共享访问,需要加互斥锁做好线程同步,避免出现数据竞争导致的未定义行为。
内容的提问来源于stack exchange,提问作者Thib
相关产品推荐
相关产品推荐

