将QString转换为QString的指针

Bas*_*rry 1 c++ string qt pointers

由于我不是C(++)专家,我对编译器的一些顽固性感到困惑,因为编译器不希望将QString转换为QString*.我有一个功能:

bool getNextMessage(int sId, QString *msg, QString *cmd)
Run Code Online (Sandbox Code Playgroud)

我在这里使用指针因为我不能在C中返回多个变量(被破坏的Perl编码器;))而我想在一段时间内使用它(getNextMessage(...)){...}样式循环.在这个函数里面有一些SQL foo,这个:

 msg = QString("");
 cmd = QString("");
 return false;
Run Code Online (Sandbox Code Playgroud)

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

 cannot convert 'QString' to 'QString*' in assignment
Run Code Online (Sandbox Code Playgroud)

亲爱的朋友们,请为我揭开神秘面纱吗?谢谢.:)

编辑:解决方案:现在使用引用感谢leemes指向它们.

lee*_*mes 5

为此,您通常使用引用,而不是指针.对于C++新手来说,很难得到差异.一个简短的解释是"引用是更安全的指针".

bool getNextMessage(int sId, QString &msg, QString &cmd)
Run Code Online (Sandbox Code Playgroud)

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

如果你想坚持指针 - 或者,为了理解如何使用指针 - 这就是你如何使用指针:

*msg = QString("");
Run Code Online (Sandbox Code Playgroud)

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

调用

msg = new QString("");
Run Code Online (Sandbox Code Playgroud)

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