1

因为我不是 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 指向它们的指针。

4

3 回答 3

5

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

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

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

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

*msg = QString("");

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

打电话

msg = new QString("");

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

于 2012-12-19T11:55:04.600 回答
4

尝试使用以下内容。

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

确保您的指针已初始化。

于 2012-12-19T11:56:29.677 回答
0

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

*msg = QString("");

或者我希望以下是等价的:

*msg = "";
于 2012-12-19T11:54:38.280 回答