[英]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.