2011-01-06 78 views
2

我有以下幾點:(我想從通過call_back到另一個函數,其中它會被稱爲)的boost ::功能錯誤

boost::function<std::string (ResolverReply& reply)> call_back = boost::bind(&ResolverCommunicator::reply_call_back, *this, _1); 

傳遞函數的簽名是:

std::string reply_call_back (ResolverReply& reply); //Member function 

和我的編譯器給我這個錯誤:

error C2665: 'boost::bind' : none of the 3 overloads can convert parameter 2 from type 'ResolverCommunicator' 
     c:\Program Files\boost\boost_1_44\boost\bind\bind.hpp(1480): could be 'boost::_bi::bind_t<R,F,L> boost::bind<std::string(__thiscall ResolverCommunicator::*)(ResolverReply &),ResolverCommunicator,boost::arg<I>>(F,A1,A2)' 
     with 
     [ 
      R=boost::_bi::unspecified, 
      F=std::string (__thiscall ResolverCommunicator::*)(ResolverReply &), 
      L=boost::_bi::list2<boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B1,boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B2>, 
      I=1, 
      A1=ResolverCommunicator, 
      A2=boost::arg<1> 
     ] 
     c:\Program Files\boost\boost_1_44\boost\bind\bind_mf_cc.hpp(43): or  'boost::_bi::bind_t<R,F,L> boost::bind<std::string,ResolverCommunicator,ResolverReply&,ResolverCommunicator,boost::arg<I>>(R (__thiscall ResolverCommunicator::*)(B1),A1,A2)' 
     with 
     [ 
      R=std::string, 
      F=boost::_mfi::mf1<std::string,ResolverCommunicator,ResolverReply &>, 
      L=boost::_bi::list2<boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B1,boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B2>, 
      I=1, 
      B1=ResolverReply &, 
      A1=ResolverCommunicator, 
      A2=boost::arg<1> 
     ] 
     c:\Program Files\boost\boost_1_44\boost\bind\bind_mf_cc.hpp(54): or  'boost::_bi::bind_t<R,F,L> boost::bind<std::string,ResolverCommunicator,ResolverReply&,ResolverCommunicator,boost::arg<I>>(R (__thiscall ResolverCommunicator::*)(B1) const,A1,A2)' 
     with 
     [ 
      R=std::string, 
      F=boost::_mfi::cmf1<std::string,ResolverCommunicator,ResolverReply &>, 
      L=boost::_bi::list2<boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B1,boost::_bi::list_av_2<ResolverCommunicator,boost::arg<1>>::B2>, 
      I=1, 
      B1=ResolverReply &, 
      A1=ResolverCommunicator, 
      A2=boost::arg<1> 
     ] 
     while trying to match the argument list '(std::string (__thiscall 
ResolverCommunicator::*)(ResolverReply &), ResolverCommunicator, boost::arg<I>)' 
     with 
     [ 
      I=1 
     ] 

有沒有人知道我做錯了什麼?

+2

綁定成員函數時,你是不是應該傳遞`this`而不是`* this`? – 2011-01-06 12:27:33

回答

0

ResolverCommunicator copy constructible(它有可公開訪問的拷貝構造函數)嗎?

boost::function<std::string (ResolverReply& reply)> 
    call_back = boost::bind(
     &ResolverCommunicator::reply_call_back, 
     *this, // copy construtibility required here for *this 
     boost::_1); 

如果沒有拷貝構造可用,在*this或者只是this使用boost::ref:如果你是路過*thisbind這是必需的。照顧實例的生活時間,然後...

編輯:嗯,是在全球命名空間的增強佔位符?