首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tr1::function时编译错误

使用tr1::function时编译错误
EN

Stack Overflow用户
提问于 2013-05-01 10:47:54
回答 2查看 395关注 0票数 0

其目的是在调用CVS890Executor::do_full_frame中的m_callback_fn时执行CDevVS890。

以下是经定罪的法典:

代码语言:javascript
复制
"CDevVS890.h"
typedef std::tr1::function<void (void* frame, int len)> DoFrameFn; 

class CDevVS890
{
public:
    CDevVS890();

    void receive();   

    DoFrameFn m_callback_fn;
}

"CDevVS890.cpp"
void CDevVS890::receive()
{
    ...
    m_callback_fn((void*)frame, (int)len);
}

/*----------------------------------------------------------------------*/

"CVS890Executor.h"
class CVS890Executor
{
public:
    CVS890Executor();

private:
    void hookup_to_DevVS890();
    void do_full_frame( void* frame, int len );
}

"CVS890Executor.cpp"
CVS890Executor::CVS890Executor()
{
    hookup_to_DevVS890();
}

void CVS890Executor::hookup_to_DevVS890()
{
m_pDevVS890 = new CDevVS890();
m_pDevVS890->m_callback_fn = 
    std::tr1::bind(&CVS890Executor::do_full_frame, this, _1);
}

void CVS890Executor::do_full_frame(void* frame, int len)
{
   ...
} 

这些错误是多重的,很难读懂:

在/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/tr1/functional:56,中包含的文件中,来自././src/Common/cdevVS890.h:17,来自CVS890Executor.h:13,来自CVS890Executor.cpp:8:成员函数中的CVS890Executor.cpp:8-typename std::tr1::result_of<_Functor(typename std::tr1::result_of 0)>(_Bound_argsstd::tr1::tuple<_UElements ...>) >:类型.)>:类型std::tr1::_Bind<_Functor(_Bound_args .)>::__call(const std::tr1::tuple<_UElements ...>&,std::tr1::_Index_tuple<_Indexes ...>),_Args = void*&,int ..._Indexes = 0,1,_Functor = std::tr1::_Mem_fn,_Bound_args =const 890_Functor*,/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/tr1_impl/functional:1191: std::tr1::_Placeholder<1>â:从std::tr1::result_of<_Functor(typename std::tr1::result_of 0)>(_Bound_args,std::tr1::tuple<_UElements ...>)>:类型.)>:类型std::tr1::_Bind<_Functor(_Bound_args .)>::operator()(_Args&.)使用_Args = void*,int,_Functor = std::tr1::_Mem_fn,_Bound_args =const 890_Functor*,std::tr1::_Placeholder<1>âstd::tr1::_Function_handler::_M_invoke实例化从-静态空洞std::tr1::_Function_handler::_M_invoke(const std::tr1::_Any_data&,_ArgTypes ...)使用_Functor = std::tr1::_Bind(CVS890Executor*,std::tr1::_Placeholder<1>)>,_ArgTypes = void*,int-âstd::tr1::function<_Res实例化âstd::tr1::function<_Res(_ArgTypes .)>:function(_Functor,typename __gnu_cxx::__enable_if<(!( std::tr1::is_integral::value),std::tr1::function<_Res(_ArgTypes .)>::Useless>::_type( _Functor =std::tr1::_Bind( _Res 890_Functor*,std::tr1::_Placeholder<1>)>,_Res= void,_ArgTypes = void*,int /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/tr1_impl/functional:1885:实例化自-!( std::tr1::is_integral::value),std::tr1::function<_Res(ArgTypes .)>&>::_type std::tr1::function<_Res(_ArgTypes .)>::operator=( _Functor ) with _Functor=std::tr1::_Bind( _Res 890_Functor*,std::tr1::_Placeholder<1>)>,_Res= void,_ArgTypes = void*,从这里实例化/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/tr1_impl/functional:1137: CVS890Executor.cpp:115:不匹配对-(std::tr1::_Mem_fn)的调用( call 890 error*&,/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/tr1_impl/functional:546:备注:候选人有:_Res std::tr1::_Mem_fn<_Res (_Class::*)(_ArgTypes .)>::operator()(_Class&,_ArgTypes .)与_Res = void,_Class = CVS890Executor,_ArgTypes = void*,int std::tr1::_Mem_fn<_Res (_Class::*)(_ArgTypes .)>:操作符()(_Class*,_ArgTypes .)与_Res = void,_Class = CVS890Executor,_ArgTypes = void*,int _Class错误:返回一个值的返回语句,在函数中返回'void‘make:* CVS890Executor.o错误1

知道这是怎么回事吗?

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-01 11:22:29

你忘了第二个论点了。您对bind函数的调用应该如下所示:

代码语言:javascript
复制
std::tr1::bind(&CVS890Executor::do_full_frame, this, _1, _2);
//                                                       ^^
票数 1
EN

Stack Overflow用户

发布于 2013-05-01 11:28:21

在CVS890Executor::hookup_to_DevVS890()中,没有将任何参数绑定到成员函数do_full_frame。

您还试图将函数的返回值赋值给m_callback_fn,但是do_full_frame()被声明为返回void (没有返回值)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16316723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档