candidate expects 1 argument, 0 provided

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类的构造函数是这样的
```cpp
explicit LengthHeaderCodec(const StringMessageCallback &cb) : messageCallback_(cb) {}
```
在我自己的需求中,ClientCodec_是不关注那个回调函数的事件的,所以我没有绑定,这样也就没有显式调用构造函数,那么也就调用了默认的构造函数,所以报错了

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

你可能感兴趣的:(C++/STL)