Pregunta

No puedo entender qué hay de malo en esta parte del 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);

Recibo errores:

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]

Ya he vuelto a intentar al menos todas las variantes de estas dos funciones con const y sin uno.

¿Fue útil?

Solución

QVector<T>::at() devuelve un const T&, lo que significa que no puedes llamar a funciones miembro no constantes en el resultado (como tu setFirstTeam() función).¿Por qué Qt no proporciona una sobrecarga no constante? mas alla de mi relacionado con la semántica de copia en escritura de Qt para sus contenedores (gracias a @peppe por señalar esto).Proporciona ambas sobrecargas para operator[], por lo que deberías hacer esto en su lugar:

_aliances[i].setFirstTeam(firstAlianceTeam);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top