【问题标题】:Modifying a QVector of QVectors passed as a pointer修改作为指针传递的 QVector 的 QVector
【发布时间】:2026-01-07 10:25:01
【问题描述】:

我在函数的参数中有一个变量,定义如下:

QVector< QVector<qreal> > *var;

在代码的某个点我想这样做:

*var[i][j] = some_value.

然而这并不能编译,因为

错误:'*(var + ((long unsigned int)(((long unsigned int)row) * 8ul)))->QVector::operator[] 与 T = QVector 中的 'operator*' 不匹配'

如何正确引用该值以便对其进行修改? (思路是真的修改了函数中传入的参数。)

【问题讨论】:

    标签: qt qvector


    【解决方案1】:

    你需要把*var放在括号里:

    (*var)[i][j] = some_value;
    

    虽然您为什么使用指向QVector 的指针?由于QVector 是Qt 通用容器系列的一部分,它使用隐式共享。这意味着如果您改为按值传递,则只会执行浅拷贝,也就是说,您实际上只会传递数据结构的薄簿记部分 - 指向更大块的指针存在于其他地方的数据。

    【讨论】:

    • 我不知道。我想避免的是复制整个结构,并且在返回时必须再次复制整个结构。如果我按值传递,那么整个副本还没有完成?谢谢!
    • 不,按值传递仅复制 QVector 的“簿记”数据(在 Windows 上是五个 ints 和一个 long,无论 QVector 的内容类型或如何它包含许多项目)。有关更多信息,请参阅Qt docs on Implicit Sharing :)
    • 非常感谢!我会改变它,因为你更喜欢非指针方法
    最近更新 更多