You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::thread调用dcp函数报错:无匹配函数解决方案咨询

解决std::thread调用带引用参数函数的编译错误

你的编译错误本质是std::thread默认会拷贝传递所有参数,但你的dcp函数第一个和第四个参数是cv::Mat&(左值引用类型)。当你直接把rgb[0]和IllumTrans传给线程构造函数时,thread会创建这些Mat对象的拷贝,而dcp函数期望接收的是原对象的引用,类型不匹配就触发了这个报错。

修复方案

用std::ref()包装所有需要以引用方式传递的参数,让std::thread传递引用而非拷贝。修改后的线程创建代码如下:

// 用std::ref包装引用类型的参数
std::thread thread_1(dcp, std::ref(rgb[0]), rows, cols, std::ref(IllumTrans), A[0]);
std::thread thread_2(dcp, std::ref(rgb[1]), rows, cols, std::ref(IllumTrans), A[1]);
std::thread thread_3(dcp, std::ref(rgb[2]), rows, cols, std::ref(IllumTrans), A[2]);

额外注意事项

  • 如果dcp函数中对IllumTrans有写操作,三个线程同时访问这个共享对象会引发数据竞争,导致未定义行为。这种情况下需要用std::mutex来保护对IllumTrans的访问,比如在修改它的代码块前后加锁和解锁。
  • 如果参数是const引用,可以用std::cref()来包装,语义更清晰。

内容的提问来源于stack exchange,提问作者Ja_cpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:31:34