Mudança no estado de uma estrutura armazenada em um QVector
Pergunta
Não consigo entender o que há de errado com esta parte do código:
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);
Eu recebo erros:
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]
Já tentei novamente pelo menos todas as variantes dessas duas funções com const
e sem um.
Solução
QVector<T>::at()
retorna um const T&
, o que significa que você não pode chamar funções-membro não const no resultado (como seu setFirstTeam()
função).Por que o Qt não fornece uma sobrecarga não-const é além de mim relacionado à semântica copy-on-write do Qt para seus contêineres (obrigado a @peppe por apontar isso).Ele fornece ambas as sobrecargas para operator[]
, então você deve fazer isso:
_aliances[i].setFirstTeam(firstAlianceTeam);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow