2011-01-06 8 views
2

私は、次ています(私はそれが呼び出される場所から別の関数にcall_backを渡したい)ブースト::関数エラー

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'を渡すのですか? –

+0

g ++で試してみましたが、エラーなしでコンパイルしています。 –

答えて

0

ResolverCommunicatorコピー可能(パブリックアクセス可能なコピーコンストラクタはありますか)ですか?

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

何のコピーの建設が利用できない場合、*thisまたは単にthisboost::refを使用する:あなたはbind*thisを渡す場合に必要です。インスタンスのライフタイムに注意してください。

編集:Hmは、グローバル名前空間の昇格プレースホルダですか?

関連する問題