QVector に格納されている構造体の状態の変化
質問
コードのこの部分の何が問題なのか理解できません。
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);
エラーが発生します:
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]
これら 2 つの関数の少なくともすべてのバリアントをすでに再試行しました const
そしてそれなしで。
解決
QVector<T>::at()
を返します const T&
, これは、結果に対して非 const メンバー関数を呼び出すことができないことを意味します (例: setFirstTeam()
関数)。Qt が非定数オーバーロードを提供しない理由は次のとおりです。 私を超えて これは、Qt のコンテナーのコピーオンライト セマンティクスに関連しています (これを指摘してくれた @peppe に感謝します)。両方のオーバーロードを提供します operator[]
, したがって、代わりに次のようにする必要があります。
_aliances[i].setFirstTeam(firstAlianceTeam);
所属していません StackOverflow