Changement de l'état d'une structure stockée dans un QVector
Question
Je n'arrive pas à comprendre ce qui ne va pas avec cette partie du code :
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);
J'obtiens des erreurs :
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'ai déjà réessayé au moins toutes les variantes de ces deux fonctions avec const
et sans un.
La solution
QVector<T>::at()
renvoie un const T&
, ce qui signifie que vous ne pouvez pas appeler des fonctions non membres const sur le résultat (comme votre setFirstTeam()
fonction).Pourquoi Qt ne fournit pas de surcharge non constante au-delà de moi lié à la sémantique de copie sur écriture de Qt pour ses conteneurs (merci à @peppe de l'avoir signalé).Il fournit les deux surcharges pour operator[]
, vous devriez donc simplement faire ceci :
_aliances[i].setFirstTeam(firstAlianceTeam);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow