使用boost :: thread错误“成员函数重新声明不允许”

时间:2012-06-10 11:32:23

标签: c++ boost-thread

我遇到了boost::thread无法解决的问题。

我有classX.h个文件:

#include <boost/thread/thread.hpp>
class classX{

    ...
    void startWork(void);
    void doWork(void);
    ...

}

然后是.cpp文件:

...
void classX::startWork(){
boost::thread(&doWork);
}
void classX::doWork(){
...
}

我无法编译,我倾向于错误(在我boost::thread(&doWork)的行中):

error C2761: 'void plsa_mt_2::doWork(void)' : member function redeclaration not allowed

此错误是与线程创建有关还是与其他内容有关?我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:2)

由于classX::doWork()classX的成员函数,因此如果不提供指向(&classX::doWork)的指针,则无法调用成员函数指针classX

实现这一目标的最快方法是使用Boost Bind创建一个带有成员函数指针和指向classX的指针的可调用函子,如下所示:

void classX::startWork() {
boost::thread t(boost::bind(&classX::doWork, this)); // be careful, the boost::thread will be destroyed when this function returns
}

如果doWork()不需要访问doWork()的实例属性,您可以使classX成为静态成员函数或全局函数:

答案 1 :(得分:1)

首先,获取指向成员函数的指针的正确语法是

&classX::doWork

但是我觉得你可能没有显示产生错误的确切代码,因为VS中&doWork的典型错误是

error C2276: '&' : illegal operation on bound member function expression