由于我不是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亲爱的朋友们,你们能为我解开这个谜团吗?谢谢。:)
编辑:解决方案:现在使用引用,这要归功于来自leemes的指向它们的指针。
发布于 2012-12-19 19:55:05
为此,您通常使用引用,而不是指针。对于C++新手来说,很难弄清楚它们之间的区别。一个简短的解释是“引用是更安全的指针”。
bool getNextMessage(int sId, QString &msg, QString &cmd)这样,您就可以在不转换为指针的情况下调用该方法,并以与处理普通变量相同的语法使用引用,因此用于设置字符串内容的代码很好用。
如果你想坚持使用指针--或者理解如何使用指针--这就是你使用指针的方式:
*msg = QString("");*msg取消引用msg,这意味着您正在处理指针后面的对象。对于函数调用,有->运算符。
呼叫
msg = new QString("");在语法上也是正确的,但是没有做你期望它做的事情!这一行意味着分配一个新的QString对象,并获取这个新创建的对象的指针。然后,将此指针赋给msg。这对于函数中的以下代码来说是很好的。但是,您更改了msg本身(指针地址),而不是msg所指向的内存。这意味着,调用者在这里不会注意到任何东西。调用方在函数调用后使用旧指针。
发布于 2012-12-19 19:56:30
尝试使用以下代码。
*msg = QString("");
*cmd = QString("");确保您的指针已初始化。
发布于 2012-12-19 19:54:38
嗯,QString不是QString*。也许您想取消对指针的引用,并将其分配给它所指向的对象:
*msg = QString("");或者,我期望以下内容是等效的:
*msg = "";https://stackoverflow.com/questions/13951874
复制相似问题