在basic_socket.hpp文件中使用lib boost asio 1.47.0时出错

Error with lib boost asio 1.47.0 in file basic_socket.hpp

本文关键字:asio boost lib 出错 0时 basic socket hpp 文件      更新时间:2023-10-16

当我试图编译这个时,我在以下代码中有一个错误:

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).

我没有注意到,我花了一段时间来解决这个问题。我希望这对其他人也有帮助。