【问题标题】:Boost ASIO async_accept compilation failsBoost ASIO async_accept 编译失败
【发布时间】:2010-06-09 04:03:40
【问题描述】:

伙计...认为在 Boost 中使用 ASIO 会变得简单直观。 :P

我终于开始明白了,但我遇到了一些麻烦。这是一个sn-p。 我在 async_accept 行上有几个编译器错误。我究竟做错了什么? :P

我的代码基于此页面: http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html

错误:

错误 1 ​​错误 C2780: 'void boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,boost::asio::ip::basic_endpoint &,AcceptHandler)' : 期望 3 论据 - 2 提供 e:\schoolcode\senior 项目\cplusplusport\cplusplusport\alexsocket.cpp 36

错误 2 错误 C2784: 'void boost::asio::basic_socket_acceptor::async_accept(boost::asio::basic_socket &,AcceptHandler)' : 无法推断 模板参数 '升压::asio::basic_socket &'来自'boost::asio::ip::tcp::socket *' e:\schoolcode\高级项目\cplusplusport\cplusplusport\alexsocket.cpp 36

bool TestSocket::StartListening(int port)
{
    bool didStart = false;

    if (!this->listening)
    {
        //try to listen
        acceptor = new tcp::acceptor(this->myService, tcp::endpoint(tcp::v4(), port));
        didStart = true; //probably change?
        tcp::socket* tempNewSocket = new tcp::socket(this->myService);
        acceptor->async_accept(tempNewSocket, boost::bind(&TestSocket::NewConnection, this, tempNewSocket, boost::asio::placeholders::error) );
    }
    else //already started!
        return false;

    this->listening = didStart;
    return didStart;
}

void TestSocket::NewConnection(tcp::socket* s, const boost::system::error_code& error)
{

}

【问题讨论】:

  • 给我们更多信息。您以this 作为第一个参数绑定到AlexSocket::NewConnection - 但据我所知,this is-not-a AlexSocket - 是吗? NewConnection 方法是虚拟的吗?
  • 呃。我试图摆脱在编写学习代码时添加到所有课程中的愚蠢的“MyName”前缀。 :P
  • 我认为第一个参数必须是*tempNewSocket。请将您遇到的错误添加到您的问题中。没有它,我们只能猜测你有什么错误。
  • 添加了错误。为疏忽道歉。 :)
  • @bobber205 我建议你使用智能指针。尽量避免直接调用 new。

标签: c++ sockets boost bind boost-asio


【解决方案1】:

async_accept 需要对套接字的引用,而不是指针,所以试试

acceptor->async_accept(*tempNewSocket, ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多