这个课给我一个C2248错误。它认为我试图访问在Boost Basic_io_object类中声明的私有成员。 错误似乎发生在初始化程序列表中,因为它在我将其注释掉时编译。 有人有什么想法吗?
class session
: public std::enable_shared_from_this<session>
{
public:
session(tcp::socket& socket)
: socket_(std::move(socket))
{
}
~session()
{
std::cout << "session ended" << std::endl;
}
void start()
{
std::cout << "session started" << std::endl;
do_read();
}
private:
void do_read()
{
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
do_write(length);
}
});
}
void do_write(std::size_t length)
{
auto self(shared_from_this());
boost::asio::async_write(socket_, boost::asio::buffer(data_, length),
[this, self](boost::system::error_code ec, std::size_t )
{
if (!ec)
{
do_read();
}
});
}
tcp::socket socket_;
enum { max_length = 1024 };
char data_[max_length];
};
答案 0 :(得分:-1)
将tcp::socket socket_
更改为tcp::socket& socket_
即可