关于boost.asio里面的socket的私有性的问题

最近做一个服务端,刚开始使用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++了,拷贝构造都忘了。

猜你喜欢

转载自blog.csdn.net/weixin_42427338/article/details/83154806