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

内部にコードを含めると、スタックオーバーフローがメッセージの投稿を拒否するため、コード全体を提供することはできません。ここにサンプルがあります:

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 に答える