尝试更改二维向量的值时出现问题
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;
。沿着这些路线。
我正在尝试更改二维 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;
。沿着这些路线。