error: no matching member function for call to ‘send‘

编译运行报错: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;  
}