1

私は最適化プロジェクトに取り組んでおり、コードの速度を上げるためにスレッドを試すことにしました。コードの形式は次のとおりです。

Main.cpp:

int main(int argc, char **argv) {
    B *b = new B(argv[1]);
    b->foo();
    delete b;
    return EXIT_SUCCESS;
}

B.cpp:

#include B.hpp

B::B(const char *filename) { .... }

B::task1(){ /*nop*/ }

void B::foo() const { 
    boost::thread td(task1);
    td.join();
}

B.hpp:

#include <boost/thread.hpp>

class B{
    public:
    void task1();
    void foo();
}

ただし、このコードをコンパイルしようとすると、次のようなエラーが表示されboost::thread td(task1)ます。

error: no matching function for call to 'boost::thread::thread(<unresolved overloaded function type>)'

問題が何であるか完全にはわからず、ハッキングを試みましたが成功しませんでした。どんな助けでも大歓迎です!

編集:新しいエラー

B.o: In function 'B::b() const':
B.cpp:(.text+0x7eb): undefined reference to 'vtable for boost::detail::thread_data_base'
B.cpp:(.text+0x998): undefined reference to 'boost::thread::start_thread()'
B.cpp:(.text+0x9a2): undefined reference to 'boost::thread::join()'
B.cpp:(.text+0xa0b): undefined reference to 'boost::thread::~thread()'
B.cpp:(.text+0xb32): undefined reference to 'boost::thread::~thread()'
B.o: In function 'boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::cmf0<void, B>, boost::_bi::list1<boost::_bi::value<B const*> > > >::~thread_data()':
B.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi4cmf0Iv4BEENS2_5list1INS2_5valueIPKS6_EEEEEEED2Ev[_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi4cmf0Iv4BEENS2_5list1INS2_5valueIPKS6_EEEEEEED5Ev]+0x8): undefined reference to 'boost::detail::thread_data_base::~thread_data_base()'
4

1 に答える 1

3

B::task()はメンバー関数であるため、 type の暗黙的な最初のパラメーターを取りますB*。したがって、インスタンスを で使用するには、インスタンスを渡す必要がありますboost::thread

void B::foo() const { 
  boost::thread td(&B::task1, this); // this is a const B*: requires task1() to be const.
  td.join();
}

しかしB::foo()、メソッドであるため、メソッドもconst作成する必要があります。B::task1()const

class B {
  void task1() const:
}
于 2013-03-05T20:23:53.770 に答える