当我试图编译这个时,我在以下代码中有一个错误:
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).
我没有注意到,我花了一段时间来解决这个问题。我希望这对其他人也有帮助。