Я не могу понять, что не так с этой частью кода:
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);
Других решений пока нет …