void show_image(){
// Create a Mat to store images
Mat cam_image;
ERROR_CODE err;
// Loop until 'e' is pressed
char key = '';
while (key != 'e') {
// Grab images
err = cam.grab();
// Check if successful
if (err == SUCCESS) {
// Retrieve left image and show with OpenCV
cam.retrieveImage(zed_image, VIEW_LEFT);
cv::imshow("VIEW", cv::Mat(cam_image.getHeight(), cam_image.getWidth(), CV_8UC4, cam_image.getPtr<sl::uchar1>(sl::MEM_CPU)));
key = cv::waitKey(5);
} else
key = cv::waitKey(5);
}
}
上面的函数正在被这个函数调用 -threaded-:
void startCAM()
{
if(show_left){
cam_call = std::thread(show_image);
}
//Wait for data to be grabbed
while(!has_data)
sleep_ms(1);
}
我收到错误:
error: no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>)’
cam_call = std::thread(show_image);
应该注意的是,我没有使用类或对象,所以 show_image 不是成员函数
错误显示为
std::thread::thread(<unresolved overloaded function type>)
,这意味着有多个名为show_image
的函数。
您需要选择其中一个重载。例如:
std::thread(static_cast<void(*)()>(show_image));
如果您的线程函数与全局作用域中已存在的函数同名,则可能会发生这种情况。
例如,就我而言,我有一个用于接收 UDP 套接字数据的函数
recv
。当我将其重命名为 receive
时,错误消失了。