0

我想创建一个新线程来运行一个函数,但是当我编译终端时显示以下错误消息:

g++ -o main.o -c main.cpp -O0 -g -Wall -fmessage-length=0 -D__STDC_CONSTANT_MACROS -std=gnu++0x  -lboost_filesystem -lboost_log_setup -lboost_log -lboost_chrono -lboost_thread -lz -lpthread -ldl -lm  
main.cpp: In function ‘int main(int, char**)’:
main.cpp:35:13: error: statement cannot resolve address of overloaded function
make: *** [main.o] Error 1

我不能给你我的整个代码,因为如果我在里面包含代码,stackoverflow 会拒绝发布消息。这是一个示例:

void foo(); 

boost::thread t(foo);

任何帮助将不胜感激。谢谢

4

1 回答 1

0

除非它是静态方法,否则您需要使用 bind()(无论何时启动非静态方法,都需要 bind())。

例子:

class Worker {
    int returnValue_;
public:
    inline void Run() {
        //...
        boost::this_thread::sleep(boost::posix_time::seconds(2));
        returnValue_ = 3;
}
    inline int getValue() const {
        return returnValue_;
    }
};

Worker worker;
boost::thread th (boost::bind(&Worker::Run, &worker));
于 2013-07-09T14:15:55.003 回答