没有匹配的函数可用于调用“std::thread::thread(<unresolved overloaded function type>)”

问题描述 投票:0回答:2
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 不是成员函数

c++ multithreading c++11
2个回答
6
投票

错误显示为

std::thread::thread(<unresolved overloaded function type>)
,这意味着有多个名为
show_image
的函数。

您需要选择其中一个重载。例如:

std::thread(static_cast<void(*)()>(show_image));

0
投票

如果您的线程函数与全局作用域中已存在的函数同名,则可能会发生这种情况。

例如,就我而言,我有一个用于接收 UDP 套接字数据的函数

recv
。当我将其重命名为
receive
时,错误消失了。

© www.soinside.com 2019 - 2024. All rights reserved.