質問

コードのこの部分の何が問題なのか理解できません。

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top