Qt QList C3892:无法分配给常量变量

Posted

技术标签:

【中文标题】Qt QList C3892:无法分配给常量变量【英文标题】:Qt QList C3892: cannot assign to a variable that is const 【发布时间】:2013-04-11 07:37:47 【问题描述】:

我有 QList 的 const 正确性问题。

我有一个方法 getValue 其签名我无法更改返回 const double 和这里​​

double vs = MinInput->getValue(0, 0);

vs 是常量。

我想使用此方法的结果构建 QList,但我收到错误 C3892。

由于我的列表是 QList,所以不能添加 const double (?)

代码是这样的

    QList<double> minmax;
    for (int i = 0; i < 2*(3+othercutoffs_var_len) ; i++  )
        minmax.append( 0.0 );


    QSP< const VarInterface<double> > MinInput = ctx.getInputVar<double>(ctx.input(Id::fromString(QL1s("Min")))[0] );
    const double vs = MinInput->getValue(0, 0);
    minmax.at(0) = vs;

最后一行代码给我带来了麻烦。 (使用其他此类 const double 填充列表时的其他错误)

getValue 的签名是这样的

const TYPE & VarData<TYPE>::getValue( uint r, uint c ) const

【问题讨论】:

【参考方案1】:

我猜正确的代码是:

minmax[0] = vs;

更新:

QList::at 返回const 引用,不能修改。

【讨论】:

为什么不使用 at() ? 因为QList::at返回const引用,不能修改。签名:const T &amp; QList::at ( int i ) const QList 使用从 0 开始的索引,就像 C++ 数组一样。要访问特定索引位置的项目,可以使用 operator[]()。在非常量列表上,operator[]() 返回对项目的引用,并且可以在赋值的左侧使用:【参考方案2】:

QList::at(int i) 是一个 getter 函数。它返回一个const 引用,你不能给它分配任何东西。

使用QList::operator[](int i)QList::replace(int i, const &amp; T value) 设置i 位置的值。

【讨论】:

以上是关于Qt QList C3892:无法分配给常量变量的主要内容,如果未能解决你的问题,请参考以下文章

(C++ QT) QList 只允许附加常量类对象?

常量类成员、赋值运算符和 QList

在 NSLayoutConstraint 上更新“常量”失败,并显示“无法分配给 'constraint' 中的 'constant'”

无法分配给“状态”,因为它是常量或只读属性

QT:将 QTextStream 存储在 QList 中

Qt:QButtonGroup的QList