C++ 将QString转换为QString的指针
由于我不是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 =
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
示例中所示。但是,如果它是强制性的,我们不能传递“空引用”。因此,默认值将是一个实例,以后不会使用它。。。最后,我认为这是品味的问题。