最近做一个服务端,刚开始使用boost库不是很熟练的使用,所以呢也出现了一点很蠢的问题。
首先就是编了一晚上都不过的问题,而且还是头文件报错,其实也没什么就是这样一个类
class Handle : public boost::enable_shared_from_this<Handle>
{
public:
Handle(boost::asio::io_service &io_ser)
{
socket_ = new boost::asio::ip::tcp::socket(io_ser);
}
void run();
boost::asio::ip::tcp::socket * get_socket();
private:
void ReadHandler(const boost::system::error_code& error, size_t bytes_transferred);
boost::asio::ip::tcp::socket socket_;
char sbuf_[1024];
};
首先它这个错误提示的就让人很容易想歪,我还以为是不是没有加什么库?
但是不是的,在构造函数里面找了N久。才发现其实问题是出现在构造的时候,函数本身看起来没毛病
Handle.h: 在构造函数‘Handle::Handle(boost::asio::io_service&)’中:
Handle.h:39:5: 错误: 对‘boost::asio::basic_stream_socket<boost::asio::ip::tcp>::basic_stream_socket()’的调用没有匹配的函数
Handle.h:39:5: 附注: 备选是:
/usr/local/include/boost/asio/basic_stream_socket.hpp:134:3: 附注: boost::asio::basic_stream_socket<Protocol>::basic_stream_socket(boost::asio::io_context&, const protocol_type&, const native_handle_type&) [with Protocol = boost::asio::ip::tcp, boost::asio::basic_stream_socket<Protocol>::protocol_type = boost::asio::ip::tcp, boost::asio::basic_stream_socket<Protocol>::native_handle_type = int]
但是对于类里面的成员变量类,会在初始化的时候调用相应的默认构造。因而是socket_对象的问题,虽然Handle类在构造函数里面没有对socket变量操作,但是还是会调用它的构造函数的。
这一点被我忽视了,我现在还不知道为什么直接把这个类放在自己定义的类里面不可以,可能就像报错一样说这个是私有的,但是它却可以被定义为指针,放在类里面被使用。
修改方法:将变量定义为指针
天啊,简直不讲道理,找到了错误的根源就很好改了,和别人的代码找一下不同就可以了。如果有大佬知道为什么,请一定要分享给我哦。谢谢
好了,菜鸡的我也许应该回过头看一看c++了,拷贝构造都忘了。