在basic_socket.hpp文件中使用lib boost asio 1.47.0时出错
Error with lib boost asio 1.47.0 in file basic_socket.hpp
当我试图编译这个时,我在以下代码中有一个错误:
void Server::accept(void)
{
Network::ptr connection = Network::initialize(this->my_acceptor.get_io_service());
this->my_acceptor.async_accept(connection->socket(), bind(&Server::endCmd, this, *connection, placeholders::error));
}
void Server::endCmd(Network connection, const boost::system::error_code& error)
{
if (!error)
{
std::cout << "success!" << std::endl;
connection.start();
this->accept();
}
}
vc++ 2010告诉我以下错误:
Error 1 error C2248: 'boost::asio::basic_io_object<IoObjectService>::basic_io_object' : cannot access private member declared in class 'boost::asio::basic_io_object<IoObjectService>'
我知道这个错误出现在这一行,因为当我注释它时,错误消失了…经过一些研究,它可能与套接字的类,当我调用connection->getSocket()
,但这个函数返回一个ref到套接字的实例:
tcp::socket& Network::socket(void)
{
return (this->my_socket);
}
所以我在网上找不到任何解决方案:(
谁知道呢?
async_accept是你自己写的东西吗?如果是这样,请确保它接受一个REFERENCE to socket,而不是按值传递。您得到的错误是说您正在尝试复制构造函数,并且将复制构造函数声明为私有(这是c++强制类不支持复制的一种方式)。
我也有这个问题,我花了几个小时看看发生了什么。我的案例是:
- A类,包含一个升压插座。类A被用作类b的成员
- 类B是一个指针,不可复制。成员A被声明为B类中的引用。
B类的原始代码为:
std::bind(&A::a_member, a_instance)
使用a_instance的地址修复了这个问题:
std::bind(&A::a_member, &a_instance).
我没有注意到,我花了一段时间来解决这个问题。我希望这对其他人也有帮助。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- Boost Asio - boost::bind 导致程序崩溃
- 使用Asio(Boost)通过网络发送灵活的数据量