【发布时间】:2023-03-03 04:09:01
【问题描述】:
我正在尝试更改二维 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>>;
}
(为了便于阅读,省略了代码)
【问题讨论】:
-
你真的需要动态分配你的
QVector吗?我会将QVector<QVector<QString>> *SecondList = new QVector<QVector<QString>>;更改为QVector<QVector<QString>> SecondList; -
是的,这会更好。我将在没有动态分配的情况下进行测试,看看它是否解决了问题。
-
是的,最好是记住,如果你使用
QVector<QVector<QString>> SecondList;,vector的元素仍然是动态分配的 -
我正在测试它,回复你