std::thread<未解析的重载函数类型>错误

std::thread <unresolved overloaded function type> error

提问人:CPS 提问时间:12/15/2012 最后编辑:BachCPS 更新时间:4/10/2015 访问量:12502

问:

我正在尝试从我的类中生成一个线程,并且该线程在我的类中执行特定方法。代码如下所示:

class ThreadClass{
    int myThread(int arg){
     // do something
    }

    void createThread(){
        thread t = thread(myThread,10);
    }

} ;

编译时的这段代码抛出一个错误,说

std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (ThreadClass::*)(int), _Args = {int}]
no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (ThreadClass::*&&)(int)’

我不确定这里的实际错误是什么。有人可以帮我解决这个问题吗?

谢谢。

C++ 多线程 C++11 标准 stdthread

评论


答:

28赞 imreal 12/15/2012 #1

问题在于,如果没有对象,就无法调用成员函数。提供指向以下指针,以便使用当前对象:this

thread t(&ThreadClass::myThread, this, 10);

您可以使用任何对象的实例,但在您的情况下,这似乎是正确的做法。ThreadClassthis

注意:请记住,您需要对创建的线程进行引用,以便稍后可以执行。join()

评论

0赞 Martin James 12/15/2012
如果您稍后需要执行 join(),则需要对创建的线程进行引用。
0赞 nore 6/5/2023
对不起,但这是哪个线程过载?
0赞 imreal 6/15/2023
@nore这个: .你可以在这里看到它:en.cppreference.com/w/cpp/thread/thread/threadtemplate< class Function, class... Args > explicit thread( Function&& f, Args&&... args );
0赞 nore 6/16/2023
OK,过载 3;但为什么要提供这个呢?这难道不被认为是一个论点吗?this
1赞 imreal 6/20/2023
@nore 调用成员函数时,需要提供对象。 (用于启动线程的机制)使用第一个参数作为调用。thisstd::invokethis