将QString转换为QString的指针

Convert QString to Pointer of QString

本文关键字:QString 指针 转换      更新时间:2023-10-16

由于我不是C( )专家,因此我被编译器的某些固执性而感到困惑,不想在这种情况下将QString转换为QString*。我有一个功能:

bool getNextMessage(int sId, QString *msg, QString *cmd)

我在这里使用指针,因为我在C中无法返回一个以上的变量(变质的perl编码器;)),我想在一段时间内使用它(getNextMessage(...)){...}样式循环。该功能内部有一些SQL FOO,此功能:

 msg = QString("");
 cmd = QString("");
 return false;

编译器所产生的所有内容是:

 cannot convert 'QString' to 'QString*' in assignment

亲爱的伙计们,请为我举起这个谜吗?谢谢。:)

编辑:解决方案:由于从Leemes的指针指针。

现在使用参考。

为此,您通常使用参考,而不是 pointers 。对于C 新手,很难获得区别。简短的解释将是"参考更安全的指针"。

bool getNextMessage(int sId, QString &msg, QString &cmd)

以这种方式,您可以在不转换为指针的情况下调用该方法,并使用与正常变量一起使用的引用,因此设置字符串内容的代码很好。

如果您想坚持指示器 - 或者,了解如何使用指针做到这一点 - 这就是您使用指针的方式:

*msg = QString("");

*msg dereferences msg,这意味着您正在使用指针背后的对象。对于功能调用,有->操作员。

呼叫

msg = new QString("");

在句法上也是正确的,但不做您期望的事情!这一行意味着您分配一个新的QString对象,并获得该新创建的对象的指针。然后,将此指针分配给msg。这对于在功能中遵循代码来说是可以的。但是,您更改了msg本身(指针地址),而不是msg指向的内存。这意味着,呼叫者不会在这里注意到。函数调用后,呼叫者与旧指针一起工作。

尝试使用以下内容。

*msg = QString("");
*cmd = QString("");

确保您的指针是初始化的。

QString不是 QString*。也许您想放弃指针并将指向的对象分配给:

*msg = QString("");

否则我希望以下等效:

*msg = "";