gpt4 book ai didi

c++ - 在类文件中包装 ZMQ C++ 时出错

转载 作者:行者123 更新时间:2023-11-30 02:32:02 27 4
gpt4 key购买 nike

我写了一个小类来用类文件包装 C++ ZMQ 绑定(bind),但是当我尝试调用 send_message 方法时看到以下错误:

在抛出 zmq::error_t 实例后终止调用:非套接字上的套接字操作

实际上,我试图将套接字存储在类中的一个指针中,然后将指向该类的指针存储在主文件中。链条断在哪里?

这是类文件中的相关代码:

zmq_client.cpp

class ZMQClient
{
zmq::socket_t *internal_socket;
public:
ZMQClient (std::string conn);
~ZMQClient () {delete internal_socket;}
void send_msg (const char * msg);
};

zmq_client.cpp

ZMQClient::ZMQClient (std::string conn)
{
//Set the internal socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REQ);
internal_socket=&socket;
internal_socket->connect (conn);
}

void ZMQClient::send_msg (const char * msg)
{
//Convert the character array to zmq::message_t
...
internal_socket->send (request);
}

这是main.cpp文件中的相关代码:

#include "src/zmq_client.h"
ZMQClient *zmqo;

void func(const char * msg)
{
zmqo->send_msg(msg);
}

int main()
{
//Set up the outbound ZMQ Client
ZMQClient zout (OMQ_OBConnStr);
zmqo = &zout;
...
func(msg);
return 0;
}

最佳答案

这里:

internal_socket=&socket;

您正在存储一个临时变量的地址。您应该简单地在您的类中按值存储套接字及其上下文:

class ZMQClient
{
zmq::context_t context;
zmq::socket_t internal_socket;

然后:

ZMQClient::ZMQClient(std::string conn)
: context(1)
, socket(context, ZMQ_REQ)
{
socket.connect(conn);
}

关于c++ - 在类文件中包装 ZMQ C++ 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com