Cambiamento nello stato di una struttura memorizzata in un qvector
Domanda
Non riesco a capire cosa c'è che non va in questa parte del codice:
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);
.
Ottengo errori:
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]
.
Ho già restituito almeno tutte le varianti di queste due funzioni con const
e senza uno.
Soluzione
QVector<T>::at()
restituisce un const T&
, il che significa che non è possibile chiamare le funzioni associate non costose sul risultato (come la funzione setFirstTeam()
).Perché QT non fornisce un sovraccarico non const è oltre a me relativo alla semantica copia-on-write di QT per i suoi contenitori (grazie a @Peppe per averlo puntato).Fornisce entrambi i sovraccarichi per operator[]
, quindi dovresti farlo invece:
_aliances[i].setFirstTeam(firstAlianceTeam);
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow