我正在编写一个程序,以使用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
答案 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&
。