编译运行报错:error: no matching member function for call to ‘send’
查看接口源码
ZMQ_CPP11_DEPRECATED("from 4.3.1, use send taking a const_buffer and send_flags") size_t send(const void *buf_, size_t len_, int flags_ = 0) { int nbytes = zmq_send(_handle, buf_, len_, flags_); if (nbytes >= 0) return static_cast<size_t>(nbytes); if (zmq_errno() == EAGAIN) return 0; throw error_t(); }
这段文字是关于 ZeroMQ (ZMQ) 库的 C++ API 的一个警告或指示。ZeroMQ 是一个高性能的异步消息库,用于构建分布式或并行应用程序。
这段文字具体解释如下:
ZMQ_CPP11_DEPRECATED: 这是一个宏,通常用于标记某个功能或方法已被弃用。
“from 4.3.1, use send taking a const_buffer and send_flags”: 这是与该宏关联的警告消息。它告诉用户从版本 4.3.1 开始,应该使用一个不同的 send 方法。这个新的 send 方法接受一个 const_buffer 和一个 send_flags 参数。
简单来说,如果你正在使用 ZeroMQ 的 C++ API,并且你看到了这个警告,那么从版本 4.3.1 开始,你应该使用新的 send 方法签名,而不是旧的签名,因为旧的签名已被弃用。
报错代码
#include <zmq.hpp> #include <iostream> int main() { zmq::context_t context(1); zmq::socket_t socket(context, ZMQ_REQ); socket.connect("tcp://localhost:5555"); std::string message = "Hello, World!"; std::cout << "Sending request: " << message << std::endl; socket.send(message); zmq::message_t reply; socket.recv(&reply); std::cout << "Received reply: " << std::string(static_cast<char*>(reply.data()), reply.size()) << std::endl; return 0; }
修改接口后 正常代码
#include <zmq.hpp> #include <iostream> int main() { zmq::context_t context(1); zmq::socket_t socket(context, ZMQ_REQ); socket.connect("tcp://localhost:5555"); std::string message = "Hello, World!"; std::cout << "Sending request: " << message << std::endl; socket.send(zmq::buffer(message)); zmq::message_t reply; socket.recv(&reply); std::cout << "Received reply: " << std::string(static_cast<char*>(reply.data()), reply.size()) << std::endl; return 0; }