Изменение состояния структуры, хранящейся в 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

Решение

QVector<T>::at() возвращает const T&Это означает, что вы не можете вызывать неконстантные функции-члены для результата (например, ваш setFirstTeam() функция). Почему Qt не предоставляет неконстантную перегрузку? за мной относится к семантике копирования при записи в Qt для его контейнеров (спасибо @peppe за указание на это). Это обеспечивает обе перегрузки для operator[]так что вы должны просто сделать это вместо этого:

_aliances[i].setFirstTeam(firstAlianceTeam);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]