Frage

Ich kann nicht verstehen, was an diesem Teil des Codes falsch ist:

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);

Ich erhalte Fehlermeldungen:

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]

Zumindest alle Varianten dieser beiden Funktionen habe ich bereits mit ausprobiert const und ohne.

War es hilfreich?

Lösung

QVector<T>::at() gibt a zurück const T&, was bedeutet, dass Sie für das Ergebnis keine nicht konstanten Memberfunktionen aufrufen können (z. B. Ihre setFirstTeam() Funktion).Warum Qt keine nicht konstante Überladung bereitstellt, ist über mich hinaus im Zusammenhang mit der Copy-on-Write-Semantik von Qt für seine Container (danke an @peppe für den Hinweis).Es bietet beide Überladungen für operator[], also sollten Sie stattdessen einfach Folgendes tun:

_aliances[i].setFirstTeam(firstAlianceTeam);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top