存储在 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
没有一个。
解决方案
QVector<T>::at()
返回一个 const T&
, ,这意味着您不能对结果调用非常量成员函数(例如您的 setFirstTeam()
功能)。为什么 Qt 不提供非常量重载是 超越我 与 Qt 容器的写时复制语义相关(感谢 @peppe 指出这一点)。它确实提供了两种重载 operator[]
, ,所以你应该这样做:
_aliances[i].setFirstTeam(firstAlianceTeam);
不隶属于 StackOverflow