解决 我尝试用类成员函数创建boost线程,但是我遇到了错误。我可以在C ++上这样做吗?我该如何解决?
源代码未满,因为它很长。
P.S。我的功能不带参数。我不会尝试使用线程指针。所以它不重复。
P.S.S我用scheduler_thread_test(scheduler::waiter_function);
替换boost :: thread boost::thread scheduler_thread_test(&scheduler::waiter_function, this);
时解决了这个问题
我明白为什么我需要'&'符号吗
平台:Linux amd64
scheduler.hpp
#ifndef SCHEDULER_H
#define SCHEDULER_H
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
#include <functional>
#include <vector>
namespace schelduler{
using namespace schelduler;
using namespace boost::posix_time;
class scheduler{
private:
//std::vector<task_timepoint*> tasks;
boost::thread *scheduler_thread;
void waiter_function();
public:
void add_task(task_timepoint* task);
scheduler();
};
}
#endif
scheduler.cpp
#include "scheduler.hpp"
using namespace schelduler;
using namespace boost::posix_time;
scheduler::scheduler()
{
//this->scheduler_thread = new std::thread(this->waiter_function);
boost::thread scheduler_thread_test(scheduler::waiter_function);
this->scheduler_thread->detach();
}
制作日志:
Scanning dependencies of target Refregiration_Telemetry-Device
[ 50%] Building CXX object CMakeFiles/Refregiration_Telemetry-Device.dir/src/main.cpp.o
[100%] Building CXX object CMakeFiles/Refregiration_Telemetry-Device.dir/src/scheduler.cpp.o
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp: In constructor ‘schelduler::scheduler::scheduler()’:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: error: no matching function for call to ‘boost::thread::thread(<unresolved overloaded function type>)’
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidates are:
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:443:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7, A8, A9)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9):
^
/usr/include/boost/thread/detail/thread.hpp:443:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 10 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:436:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7, A8)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8):
^
/usr/include/boost/thread/detail/thread.hpp:436:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 9 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:429:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> boost::thread::thread(F, A1, A2, A3, A4, A5, A6, A7)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7):
^
/usr/include/boost/thread/detail/thread.hpp:429:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 8 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:422:9: note: template<class F, class A1, class A2, class A3, class A4, class A5, class A6> boost::thread::thread(F, A1, A2, A3, A4, A5, A6)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6):
^
/usr/include/boost/thread/detail/thread.hpp:422:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 7 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:415:9: note: template<class F, class A1, class A2, class A3, class A4, class A5> boost::thread::thread(F, A1, A2, A3, A4, A5)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4,A5 a5):
^
/usr/include/boost/thread/detail/thread.hpp:415:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 6 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:408:9: note: template<class F, class A1, class A2, class A3, class A4> boost::thread::thread(F, A1, A2, A3, A4)
thread(F f,A1 a1,A2 a2,A3 a3,A4 a4):
^
/usr/include/boost/thread/detail/thread.hpp:408:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 5 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:401:9: note: template<class F, class A1, class A2, class A3> boost::thread::thread(F, A1, A2, A3)
thread(F f,A1 a1,A2 a2,A3 a3):
^
/usr/include/boost/thread/detail/thread.hpp:401:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 4 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:394:9: note: template<class F, class A1, class A2> boost::thread::thread(F, A1, A2)
thread(F f,A1 a1,A2 a2):
^
/usr/include/boost/thread/detail/thread.hpp:394:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 3 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:388:9: note: template<class F, class A1> boost::thread::thread(F, A1, typename boost::disable_if<boost::thread_detail::is_convertible<F&, boost::thread_attributes>, boost::thread::dummy*>::type)
thread(F f,A1 a1,typename disable_if<boost::thread_detail::is_convertible<F&,thread_attributes >, dummy* >::type=0):
^
/usr/include/boost/thread/detail/thread.hpp:388:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: candidate expects 3 arguments, 1 provided
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:337:9: note: boost::thread::thread(boost::thread&&)
thread(BOOST_THREAD_RV_REF(thread) x)
^
/usr/include/boost/thread/detail/thread.hpp:337:9: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘boost::thread&&’
/usr/include/boost/thread/detail/thread.hpp:272:9: note: template<class F> boost::thread::thread(const attributes&, F&&)
thread(attributes const& attrs, BOOST_THREAD_RV_REF(F) f):
^
/usr/include/boost/thread/detail/thread.hpp:272:9: note: template argument deduction/substitution failed:
/home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:44:67: note: cannot convert ‘((schelduler::scheduler*)this)->schelduler::scheduler::waiter_function’ (type ‘<unresolved overloaded function type>’) to type ‘const attributes& {aka const boost::thread_attributes&}’
boost::thread scheduler_thread_test(scheduler::waiter_function);
^
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:262:18: note: boost::thread::thread(F&&) [with F = void (schelduler::scheduler::*)()]
explicit thread(BOOST_THREAD_RV_REF(F) f
^
/usr/include/boost/thread/detail/thread.hpp:262:18: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘void (schelduler::scheduler::*&&)()’
/usr/include/boost/thread/detail/thread.hpp:246:9: note: boost::thread::thread()
thread() BOOST_NOEXCEPT;
^
/usr/include/boost/thread/detail/thread.hpp:246:9: note: candidate expects 0 arguments, 1 provided
In file included from /usr/include/boost/thread/thread_only.hpp:22:0,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/include/scheduler.hpp:5,
from /home/dm3ch/Workspace/Refregiration_Telemetry/Device/src/scheduler.cpp:1:
/usr/include/boost/thread/detail/thread.hpp:193:18: note: boost::thread::thread(boost::detail::thread_data_ptr)
explicit thread(detail::thread_data_ptr data);
^
/usr/include/boost/thread/detail/thread.hpp:193:18: note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘boost::detail::thread_data_ptr {aka boost::shared_ptr<boost::detail::thread_data_base>}’
make[2]: *** [CMakeFiles/Refregiration_Telemetry-Device.dir/src/scheduler.cpp.o] Error 1
make[1]: *** [CMakeFiles/Refregiration_Telemetry-Device.dir/all] Error 2
make: *** [all] Error 2