繁体   English   中英

将QString转换为QString的指针

[英]Convert QString to Pointer of QString

因为我不是C(++)专家,所以我对编译器的某些顽固性感到沮丧,因为他们不想将QString转换为QString *。 我有一个功能:

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

我在这里使用指针,是因为我不能在C中返回多个变量(损坏的Perl编码器;)),并且我想在while(getNextMessage(...)){...}样式循环中使用它。 在该函数内部,有一些SQL foo和以下代码:

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

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

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

亲爱的人们,请您为我揭开谜底吗? 谢谢。 :)

编辑:解决方案:现在使用引用感谢莱姆指向它们的指针。

为此,通常使用引用 ,而不是指针 对于C ++新手,很难获得区别。 简短的解释是“引用是更安全的指针”。

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

这样,您可以调用该方法而无需先转换为指针,并且可以使用与普通变量相同的语法使用引用,因此用于设置字符串内容的代码很好。

如果您要坚持使用指针-或者要了解如何使用指针-这是使用指针的方法:

*msg = QString("");

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

呼唤

msg = new QString("");

在语法上也是正确的,但是没有按照您的预期做! 这行意味着您分配了一个新的QString对象,并获得了这个新创建的对象的指针。 然后,将此指针分配给msg 这对于在函数中跟随代码很好。 但是,您更改了msg本身(指针地址),而不是msg指向的内存。 这意味着,呼叫者在这里不会注意到任何东西 函数调用之后,调用方将使用旧指针。

尝试使用以下内容。

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

确保您的指针已初始化。

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

*msg = QString("");

或者我期望以下是等效的:

*msg = "";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM