将QString转换为QString的指针

时间:2012-12-19 11:52:46

标签: c++ string qt pointers

由于我不是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的指针。

3 个答案:

答案 0 :(得分:5)

为此,您通常使用引用,而不是指针。对于C ++新手来说,很难得到差异。一个简短的解释是“引用是更安全的指针”。

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

这样,您可以在不转换为指针的情况下调用该方法,并使用与使用普通变量时使用相同语法的引用,因此您设置字符串内容的代码很好。

如果你想坚持指针 - 或者,为了理解如何使用指针 - 这就是你使用指针的方式:

*msg = QString("");

*msg解除引用msg,这意味着您正在使用指针后面的对象 。对于函数调用,有->运算符。

调用

msg = new QString("");

在语法上也是正确的,但不会做你期望它做的事情!此行表示您分配新的QString对象并获取此新创建的对象的指针。然后,将此指针指定给msg。这适用于函数中的以下代码。但是,您更改了msg本身(指针地址)而不是msg指向的内存。这意味着,调用者不会在此处注意任何。调用函数在函数调用之后使用旧指针。

答案 1 :(得分:4)

尝试使用以下内容。

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

确保您的指针已初始化。

答案 2 :(得分:0)

QString不是QString*。也许你想取消引用指针并分配给它所指向的对象:

*msg = QString("");

或者我希望以下内容是等效的:

*msg = "";