candidate expects 1 argument, 0 provided

来源:互联网 发布:爱卡自动发卡平台源码 编辑:程序博客网 时间:2024/06/05 08:30

Error Message

chunk.h: In constructor ‘Chunk::Chunk(muduo::net::EventLoop*, const muduo::net::InetAddress&, const muduo::net::InetAddress&)’:chunk.h:70:161: error: no matching function for call to ‘LengthHeaderCodec::LengthHeaderCodec()’                                                                                            serverCodec_(boost::bind(&Chunk::onFileMessage, this, _1, _2, _3, _4))                                                                                                                                                                 ^chunk.h:39:14: note: candidate: LengthHeaderCodec::LengthHeaderCodec(const StringMessageCallback&)     explicit LengthHeaderCodec(const StringMessageCallback &cb) : messageCallback_(cb) {}              ^chunk.h:39:14: note:   candidate expects 1 argument, 0 provided
遇到两次这种问题。第一次是之前我写了两个派生类继承了一个基类,后来实现感觉不合适,又改成回调的方式来实现,但是只取消了一个类的继承,另一个忘了取消,因为是回调的方式实现,自然不用再构造基类,但是第二个派生类我忘了取消继承,最后不停的报错。原因是它以为我调用了默认的构造函数,但基类没有默认的构造函数(实际上也不需要)。第二次是对于LengthHeaderCodec类,我声明了两个对象(serverCodec_, ClientCodec_)在类Chunk中,而LengthHeaderCodec类的构造函数是这样的```cppexplicit LengthHeaderCodec(const StringMessageCallback &cb) : messageCallback_(cb) {}```在我自己的需求中,ClientCodec_是不关注那个回调函数的事件的,所以我没有绑定,这样也就没有显式调用构造函数,那么也就调用了默认的构造函数,所以报错了

出现candidate expects xx argument, 0 provided这种情况,说明是可能是调用了默认的构造函数

阅读全文
0 0