将浮点数转换为浮点数*

时间:2013-09-18 20:10:37

标签: c++

我的代码中有QStandardItem *列表

QList<QStandardItem*> lst

现在这是可以接受的并且有效

float a = lst[0]->text().toFloat();

但以下情况不起作用

float* a = &(lst[0]->text().toFloat());

我收到了一个智能错误陈述

  

表达式必须是左值或函数指示符

我需要一个指针,因为我使用的外部库需要一个看起来像这样的引用

 some_class.add_variable(const std::string& variable_name, float& t);

因此,如果我得到一个指针,我可以简单地将其作为* a

传递

关于如何解决此问题的任何建议?

5 个答案:

答案 0 :(得分:3)

右侧是所谓的临时。它是一个在当前表达式结束后不存在的对象。出于显而易见的原因,你无法取得临时的地址;表达式结束后,你的指针就会无效。

你能做的是:

float a = lst[0]->text().toFloat();
float* aPtr = &a;

这将安全地复制临时值(或在C ++ 11中,它可能move临时值),然后您可以引用您的本地非临时变量。

答案 1 :(得分:2)

使用float a = lst[0]->text().toFloat();并将其作为&a传递给库函数。

答案 2 :(得分:0)

获取函数返回的临时值的地址不起作用。该值应该分配给左值变量。

为什么你想要float的地址而不是实际值?

您应该只处理已保存在某处的值的地址或指针。

答案 3 :(得分:0)

实际上,你的外部函数不需要地址,需要参考,所以你不需要指针。

但是,如果你真的需要指向局部变量的指针:

float x = something...;
some_function(&x);

会给你你想要的东西。

答案 4 :(得分:0)

注意:如果您在此声明后引用float* a = &(lst[0]->text().toFloat());a将为您提供未定义的行为。这是因为匿名临时.tofloat()返回的浮点数)在语句后将超出范围,a将失效; 不会指出任何有意义的事情。

您应该写float a = lst[0]->text().toFloat(),并将&a传递给该函数。也就是说,只要您需要,就将a保留在范围内。