1

我不明白这部分代码有什么问题:

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无论有无。

4

1 回答 1

3

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

_aliances[i].setFirstTeam(firstAlianceTeam);
于 2013-11-16T12:22:41.033 回答