我正在尝试更改二维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>>;
}
(为便于阅读,省略了代码)
答案 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;
。遵循这些原则。