1

我的代码中有 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

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

4

5 回答 5

3

右手边是所谓的临时。它是一个在当前表达式结束后将不存在的对象。由于显而易见的原因,您不能获取临时人员的地址;表达式结束后,您将有一个无效的指针。

你可以做的是:

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

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

于 2013-09-18T20:12:51.707 回答
2

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

于 2013-09-18T20:11:57.153 回答
0

实际上,您的外部函数不需要地址,它需要一个 REFERENCE,因此您不需要指针。

但是,如果您确实需要指向局部变量的指针:

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

会给你你所追求的。

于 2013-09-18T20:15:36.557 回答
0

注意:如果您参考以下此语句,float* a = &(lst[0]->text().toFloat());将会给您未定义的行为。a这是因为匿名临时变量(返回的浮点数.tofloat())在语句之后会超出范围a而失效;不会指向任何有意义的东西。

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

于 2013-09-18T20:16:12.880 回答
0

获取函数返回的临时值的地址是行不通的。该值应该分配给左值变量。

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

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

于 2013-09-18T20:13:19.213 回答