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.

È stato utile?

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
scroll top