由于我不是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的指针。
答案 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 = "";