文件basic_socket.hpp中的lib boost asio 1.47.0出错

时间:2011-11-09 20:57:01

标签: c++ visual-studio-2010 boost boost-asio

当我尝试编译时,我在以下代码中出错:

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()时,可能是套接字的类,但是这个函数返回一个socket实例的引用:

tcp::socket& Network::socket(void)
{
    return (this->my_socket);
}

所以我在网上找不到任何解决方案:(

任何人都有想法?

2 个答案:

答案 0 :(得分:2)

是async_accept你自己写的东西吗?如果是这样,请确保它对socket进行REFERENCE,而不是按值传递。您得到的错误是说您正在尝试复制构造,并且复制构造函数被声明为私有(这是C ++强制该类不支持复制的方式)。

答案 1 :(得分:2)

我也有这个问题,我花了几个小时看看发生了什么。我的情况是:

  • 包含升压插座的A类。 A类它被用作B类的成员。
  • B类是一个指针,它不可复制。成员A被宣布为B类的参考。

B班的原始代码是:

std::bind(&A::a_member, a_instance)

通过使用a_instance的地址(当然)修复了问题:

std::bind(&A::a_member, &a_instance).

我没注意到,我花了一段时间来解决这个问题。我希望它也会帮助别人。