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

Problem when attempting to change the value of a two-dimensional vector

我正在尝试更改二维 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

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

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

QVector at() returns a const T&, try using operator [] 相反,returns 非常量 &

所以 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;。沿着这些路线。