创建消息recieve_listener时出现Socket.IO错误

时间:2019-03-08 11:09:09

标签: c++ socket.io

我正在编写一个程序,以使用Socket.IO与NodeJS服务器进行通信。我已成功连接到服务器,并且已将消息发送到服务器。但是创建消息receive_listener时出现错误。

Error Statement :
this->current_socket->on("message", std::bind(&Socket_IO::receive_listener, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));

void Socket_IO::receive_listener(std::string const& name, sio::message::ptr const& data, bool hasAck, sio::message::ptr &ack_resp)
{
    spdlog::info("Data Recieved : " + data->get_map()["message"]->get_string());
}
上面给出的

代码返回以下错误。

no instance of overloaded function "sio::socket::on" matches the argument list  
argument types are: (const char [8], std::_Binder<std::_Unforced, void (Socket_IO::*)(const std::string &name, const sio::message::ptr &data, bool hasAck, sio::message::ptr &ack_resp), Socket_IO *, const std::_Ph<1> &, const std::_Ph<2> &, const std::_Ph<3> &, const std::_Ph<4> &>)
            object type is: sio::socket

'void sio::socket::on(const std::string &,const sio::socket::event_listener_aux &)': cannot convert argument 2 from 'std::_Binder<std::_Unforced,void (__cdecl Socket_IO::* )(const std::string &,const sio::message::ptr &,bool,sio::message::ptr &),Socket_IO *,const std::_Ph<1> &,const std::_Ph<2> &,const std::_Ph<3> &,const std::_Ph<4> &>' to 'const sio::socket::event_listener &'

tuple index out of bounds

操作系统:Windows 10专业版。

IDE:Visual Studio 15.9.7

C ++:C ++ 17

1 个答案:

答案 0 :(得分:1)

我通过更改Socket_IO :: receive_listener定义解决了该错误

来自

void Socket_IO::receive_listener(std::string const& name, sio::message::ptr const& data, bool hasAck, sio::message::ptr &ack_resp)

void Socket_IO::receive_listener(std::string const&name, sio::message::ptr const& data, bool hasAck, sio::message::list &ack_resp)

尽管该示例在读取头文件后为sio::message::ptr使用了&ack_resp数据类型,但我发现event_listener_aux的功能定义要求回调定义为

std::function<void(const std::string& name,message::ptr const& message,bool need_ack, message::list& ack_message) 

请注意,ack_message需要message::list&数据类型,而不是示例中提到的message::ptr&