首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QString转换为QString的指针

将QString转换为QString的指针
EN

Stack Overflow用户
提问于 2012-12-19 19:52:46
回答 3查看 6.4K关注 0票数 1

由于我不是C(++)专家,我被一些顽固的编译器不想将QString转换成QString*所困扰。我有一个函数:

代码语言:javascript
复制
bool getNextMessage(int sId, QString *msg, QString *cmd)

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

代码语言:javascript
复制
 msg = QString("");
 cmd = QString("");
 return false;

编译器从中产生的所有内容是:

代码语言:javascript
复制
 cannot convert 'QString' to 'QString*' in assignment

亲爱的朋友们,你们能为我解开这个谜团吗?谢谢。:)

编辑:解决方案:现在使用引用,这要归功于来自leemes的指向它们的指针。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-19 19:55:05

为此,您通常使用引用,而不是指针。对于C++新手来说,很难弄清楚它们之间的区别。一个简短的解释是“引用是更安全的指针”。

代码语言:javascript
复制
bool getNextMessage(int sId, QString &msg, QString &cmd)

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

如果你想坚持使用指针--或者理解如何使用指针--这就是你使用指针的方式:

代码语言:javascript
复制
*msg = QString("");

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

呼叫

代码语言:javascript
复制
msg = new QString("");

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

票数 5
EN

Stack Overflow用户

发布于 2012-12-19 19:56:30

尝试使用以下代码。

代码语言:javascript
复制
*msg = QString("");
*cmd = QString("");

确保您的指针已初始化。

票数 4
EN

Stack Overflow用户

发布于 2012-12-19 19:54:38

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

代码语言:javascript
复制
*msg = QString("");

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

代码语言:javascript
复制
*msg = "";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13951874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档