我试图为QUdpSocket创建一个包装器类;它应该只将数据报发送到一个端点。所以,当然,我将目标地址和端口传递给构造函数并保存以供以后使用:
class Wrapper
{
public:
Wrapper(const QHostAddress & destinationAddress, quint16 destinationPort) :
destAddress(destinationAddress),
destPort(destinationPort)
{}
void sendData(char * data, uint32_t size)
{
udpSocket.writeDatagram(data, size, destAddress, destPort);
}
QUdpSocket udpSocket;
const QHostAddress & destAddress;
quint16 destPort;
};
它编译得很好,但是,当我调用sendData时会出现分段错误。在调试器中,我只能看到destAddress是"优化了引用"。如果我只是把一个实际地址放在那里一切正常。所以看起来destAddress是某种空引用。
但是没有null引用这样的东西,是吗?那么发生了什么?我显然遗漏了一些东西。
答案 0 :(得分:1)
只需将const QHostAddress &destAddress
更改为课程内的QHostAddress destAddress
即可。声明,它会没问题。
参考不是真正的变量。除了"语法糖",它只是指针内部。就像普通指针一样,它需要"主机"变量存在。您可能已经破坏了ct的参数,因此在取消引用存储的参考时发现了错误。