Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将QString转换为QString的指针_C++_String_Qt_Pointers - Fatal编程技术网

C++ 将QString转换为QString的指针

C++ 将QString转换为QString的指针,c++,string,qt,pointers,C++,String,Qt,Pointers,由于我不是C(++)专家,我被编译器的某些顽固性难住了,因为编译器不想将QString转换为QString*。 我有一个功能: bool getNextMessage(int sId, QString *msg, QString *cmd) 我在这里使用指针是因为我不能在C中返回多个变量(损坏的Perl coder;),我想在一段时间内(getNextMessage(…){…}样式的循环中使用它。 在该函数中有一些SQL foo,如下所示: msg = QString(""); cmd =

由于我不是C(++)专家,我被编译器的某些顽固性难住了,因为编译器不想将QString转换为QString*。 我有一个功能:

bool getNextMessage(int sId, QString *msg, QString *cmd)
我在这里使用指针是因为我不能在C中返回多个变量(损坏的Perl coder;),我想在一段时间内(getNextMessage(…){…}样式的循环中使用它。 在该函数中有一些SQL foo,如下所示:

 msg = QString("");
 cmd = QString("");
 return false;
编译器由此产生的所有结果如下:

 cannot convert 'QString' to 'QString*' in assignment
亲爱的,你们能帮我解开这个谜吗?谢谢。:)

编辑:
解决方案:现在使用引用,这多亏了leemes中指向它们的指针。

那么
QString
不是
QString*
。也许您希望取消对指针的引用,并将其指定给指向的对象:

*msg = QString("");
或者,我认为以下是等效的:

*msg = "";

嗯,
QString
不是
QString*
。也许您希望取消对指针的引用,并将其指定给指向的对象:

*msg = QString("");
或者,我认为以下是等效的:

*msg = "";

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

通过这种方式,您可以调用该方法,而无需先转换为指针,并使用与处理普通变量相同语法的引用,因此设置字符串内容的代码很好

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

*msg = QString("");
*msg
取消引用
msg
,表示您正在处理指针后面的对象。对于函数调用,有
->
操作符

召唤

msg = new QString("");

在语法上也是正确的,但是没有达到你期望的效果!这一行表示您分配了一个新的QString对象,并获得了这个新创建的对象的指针。然后,将该指针指定给
msg
。这对于函数中的以下代码很好。但是,您更改了
msg
本身(指针地址),而不是
msg
指向的内存。这意味着,打电话的人不会注意到这里的任何东西。调用方在函数调用后使用旧指针。

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

通过这种方式,您可以调用该方法,而无需先转换为指针,并使用与处理普通变量相同语法的引用,因此设置字符串内容的代码很好

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

*msg = QString("");
*msg
取消引用
msg
,表示您正在处理指针后面的对象。对于函数调用,有
->
操作符

召唤

msg = new QString("");

在语法上也是正确的,但是没有达到你期望的效果!这一行表示您分配了一个新的QString对象,并获得了这个新创建的对象的指针。然后,将该指针指定给
msg
。这对于函数中的以下代码很好。但是,您更改了
msg
本身(指针地址),而不是
msg
指向的内存。这意味着,打电话的人不会注意到这里的任何东西。调用方在函数调用后使用旧指针。

尝试使用以下命令

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

确保指针已初始化。

请尝试使用以下命令

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

确保指针已初始化。

您确定该语法吗?@acraig5075因为
msg
是指针,
*msg
是对象。将内容分配给
*msg
将更改
msg
指向的位置的内容,因此这很好。请解释,为什么这是解决方案。您确定该语法吗?@acraig5075因为
msg
是指针,
*msg
是对象。将内容分配给
*msg
将更改
msg
指向的位置的内容,因此这很好。请解释,为什么这是解决方案。函数的Out参数实际上是我发现指针优于引用的一种视图情况:在堆栈上创建QString foo,然后通过&foo传递它-表示它是一个out参数。这种模式的一个例子是。QString::toInt(bool*ok),其中ok返回解析int是否成功。@Frankosterfield当参数为可选参数时,我同意您的意见,如
QString::toInt
示例中所示。但是,如果它是强制性的,我们不能传递“空引用”。因此,默认值将是一个实例,以后不会使用它。。。最后,我认为这是一个品味的问题。函数的Out参数实际上是一种视图情况,我发现指针比引用更可取:在堆栈上创建QString foo,然后通过&foo传递它&表示它是Out参数。这种模式的一个例子是。QString::toInt(bool*ok),其中ok返回解析int是否成功。@Frankosterfield当参数为可选参数时,我同意您的意见,如
QString::toInt
示例中所示。但是,如果它是强制性的,我们不能传递“空引用”。因此,默认值将是一个实例,以后不会使用它。。。最后,我认为这是品味的问题。