Изменение состояния структуры, хранящейся в QVector

StackOverflow https://stackoverflow.com//questions/20018381

Вопрос

Я не могу понять, что не так с этой частью кода:

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top