提问人:CPS 提问时间:12/15/2012 最后编辑:BachCPS 更新时间:4/10/2015 访问量:12502
std::thread<未解析的重载函数类型>错误
std::thread <unresolved overloaded function type> error
问:
我正在尝试从我的类中生成一个线程,并且该线程在我的类中执行特定方法。代码如下所示:
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)’
我不确定这里的实际错误是什么。有人可以帮我解决这个问题吗?
谢谢。
答:
28赞
imreal
12/15/2012
#1
问题在于,如果没有对象,就无法调用成员函数。提供指向以下指针,以便使用当前对象:this
thread t(&ThreadClass::myThread, this, 10);
您可以使用任何对象的实例,但在您的情况下,这似乎是正确的做法。ThreadClass
this
注意:请记住,您需要对创建的线程进行引用,以便稍后可以执行。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 调用成员函数时,需要提供对象。 (用于启动线程的机制)使用第一个参数作为调用。this
std::invoke
this
评论