1

我有这个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

此错误与线程创建有关还是与其他问题有关?我能做些什么来解决它?

4

2 回答 2

2

由于classX::doWork()是 的成员函数classX,因此您不能在(&classX::doWork)不提供指向 的指针的情况下调用成员函数指针classX

实现这一点的 Boostiest 方法是使用 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

于 2012-06-10T11:56:23.303 回答
1

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

&classX::doWork

但是我认为您可能没有显示产生错误的确切代码,因为&doWorkVS 中的典型错误是

error C2276: '&' : illegal operation on bound member function expression
于 2012-06-10T11:48:47.850 回答