错误:对‘std::thread::thread(<unresolved overloaded function type>)’的调用没有匹配的函数

在类中定义了成员函数report()以及run(),现在想在run()函数中创建线程运行report()函数,原始代码如下:

class ClassA
{
    ...
    void run();
    void report();
    ...
};
...
void ClassA::run()
{
    thread t_report(report);
    t_report.detach();
}

编译报错:

错误:对‘std::thread::thread(<unresolved overloaded function type>)’的调用没有匹配的函数

经查有两点需要注意,首先不能只提供成员函数而不提供类型,即需要传递&ClassA::report以指示成员函数的地址,其次非静态成员函数需要明确对其进行调用的对象。代码修改为:

class ClassA
{
    ...
    void run();
    void report();
    ...
};
...
void ClassA::run()
{
    thread t_report(&ClassA::report, this);
    t_report.detach();
}

编译通过。
参考stackoverflow:std :: thread :: thread(<unresolved overloaded function type>)在Qt中 - VoidCC

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容