尝试更改二维向量的值时出现问题

时间:2019-07-31 16:48:29

标签: c++ qt qvector

我正在尝试更改二维QVector(QVector<QVector<QString>)的值。但是,尝试该操作时,出现以下错误:passing 'const QString' as 'this' argument discards qualifiers [-fpermissive]

我首先认为问题出在我访问QVector中数据的方式上。因此,我尝试通过operator []访问它。这给了我以下错误:no match for 'operator=' (operand types are 'QVector<QString>' and 'QString')。我还尝试取消对向量(*SecondList的引用,因为我不确定operator []是否做到了,并得到以下错误:no match for 'operator*' (operand type is 'const QVector<QString>')

这是有问题的代码:

void Handler::changePassword(QString newPassword, int id)
{

    QString nP = newPassword;

    int i = 0;
    bool loopBreaker = false;

    while (!loopBreaker)    
    {
        if (SecondList->at(i).at(2) == QString::number(id))
        {//Changes the value for password in "secondlist"
            SecondList->at(i).at(0) = nP;    // ----> ERROR
            loopBreaker = true;
            saveList();
        }
        i++;
    }
}

这是Handler类的头文件

class Handler : public QWidget
{
private: 
    QVector<QVector<QString>> *SecondList = new QVector<QVector<QString>>;
}

(为便于阅读,省略了代码)

2 个答案:

答案 0 :(得分:1)

QVector at()返回一个 const T&,尝试使用operator [],它返回 non-const

答案 1 :(得分:0)

Ben在here上回答了这个问题

但是原因是QVector::at方法是const,而完整的原型是const T &QVector::at(int i) const

因此,您将不得不使用QVector::operator[],其完整原型为T &QVector::operator[](int i)

所以我会尝试SecondList->operator[](i).operator[](0) = nP;。遵循这些原则。