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指向它们.
为此,您通常使用引用,而不是指针.对于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.这意味着,来电者不会在这里注意到任何事情.函数调用后调用者使用旧指针.