【发布时间】:2022-02-04 22:08:06
【问题描述】:
我目前正在尝试在我的应用程序中执行以下操作:
#include "zmqworker.h"
#include <QDebug>
ZMQWorker::ZMQWorker(QObject *parent)
: QObject{parent}
{
zmq::context_t ctx;
zmq::socket_t sock(ctx, zmq::socket_type::dealer);
qDebug() << "Dealer Socket created";
}
void ZMQWorker::connectSocket()
{
// zmq::context_t ctx;
// std::string origin="CPP_ZMQ";
sock.connect("tcp://127.0.0.1:5555");
qDebug() << sock;
qDebug() << "Dealer Socket connected";
}
我正在尝试在构造函数中创建一个套接字,它肯定会被调用。在连接函数中,我试图连接到 zmq 套接字。由于 sock 为 0x0,因此引发异常。如果我在 connectSocket 函数中执行所有部分,则它可以正常工作并且 sock 不为空。
因为我只习惯于 Java、Python、JavaScript 和 Go 这样的语言,所以这种行为对我来说没有意义,虽然我可以尝试直到找到解决方案,但我不想遇到我只是得到一些有用的东西,但我不明白。
应用是QT6.2
C++20/CMake
【问题讨论】:
-
sock在超出范围时被销毁,使其成为数据成员。 -
您没有显示完整的代码。请提供minimal reproducible example。但无论如何:
zmq::socket_t sock(ctx, zmq::socket_type::dealer);不会初始化名为sock的类成员。它创建了一个名为sock的新函数局部变量,该变量一直存在到函数结束。您正在成员初始化器列表中正确初始化类成员(而不是基类):QObject{parent}。对sock执行相同操作。 -
当然可以……#facepalm