Изменение состояния структуры, хранящейся в 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()
возвращает a const T&
, что означает , что вы не можете вызывать неконстантные функции-члены для результата (например, ваши setFirstTeam()
функция).Почему Qt не предоставляет неконстантную перегрузку, так это за пределами меня связано с семантикой копирования при записи Qt для своих контейнеров (спасибо @peppe за указание на это).Это действительно обеспечивает обе перегрузки для operator[]
, так что вам следует просто сделать это вместо этого:
_aliances[i].setFirstTeam(firstAlianceTeam);
Не связан с StackOverflow