我正在研究一个优化项目,因此决定尝试使用线程来 boost 代码速度。代码的格式为:
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()'
最佳答案
B::task()
是一个成员函数,因此它需要一个隐式的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:
}
关于c++ - boost线程错误<未解析的重载函数类型>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15233334/