更改存储在QVector中的结构的状态

时间:2013-11-16 12:20:10

标签: c++ qt vector struct qvector

我无法理解这部分代码有什么问题:

struct aliance {

    ...

    void setFirstTeam(const team& _team) {
        firstTeam = _team;
    }

    void setSecondTeam(const team& _team) {
        secondTeam = _team;
    }

}     

QVector< aliance > _aliances;  

...     

_aliances.at(i).setFirstTeam(firstAlianceTeam);
_aliances.at(i).setSecondTeam(secondAlianceTeam);

我收到错误:

passing 'const aliance' as 'this' argument of 'void aliance::setFirstTeam(const team&)' discards qualifiers [-fpermissive]
passing 'const aliance' as 'this' argument of 'void aliance::setSecondTeam(const team&)' discards qualifiers [-fpermissive]

我已经使用const至少重复了这两个函数的所有变体而没有一个。

1 个答案:

答案 0 :(得分:3)

QVector<T>::at()返回const T&,这意味着您无法在结果上调用非const成员函数(例如您的setFirstTeam()函数)。为什么Qt没有提供非常量的重载是超出我的与Qt的容器上的写时复制语义有关(感谢@peppe指出这一点)。它确实为operator[]提供了重载,所以你应该这样做:

_aliances[i].setFirstTeam(firstAlianceTeam);