私は次のコードをHVE CONSTでありますここにアイテムオブジェクトへのアクセスを妨げるべきであるconst型はありません。でも、次のメッセージが表示されます:オブジェクトがメンバ関数オブジェクトタイプと互換性のない修飾子を入力したこと
オブジェクトにはquali型がありますメンバーファンクションオブジェクトタイプと互換性のないファイアはconst
どのように修正できますか?
私は次のコードをHVE CONSTでありますここにアイテムオブジェクトへのアクセスを妨げるべきであるconst型はありません。でも、次のメッセージが表示されます:オブジェクトがメンバ関数オブジェクトタイプと互換性のない修飾子を入力したこと
オブジェクトにはquali型がありますメンバーファンクションオブジェクトタイプと互換性のないファイアはconst
どのように修正できますか?
簡潔に言えば、セットイテレータでのみconst関数を呼び出すことができます。
説明:
セットが内部Item
でソートされます。したがって、(反復子を介して)参照にアクセスするときには、Item
の値を変更するための何かをすることはできません(これは以前のC++バージョンでは実際に簡単に可能でした)。
誤って値を変更すると、内部で「順序付け」が変更されず、オブジェクトが理論上「存在」していてもルックアップが失敗することがあります。
数字でこれを想像してみて、あなたはあなたが0とコンテナを探しますとき
1 2 3 4 5 6 7 8 0
今(参照することにより)0~9の値を変更する今セット
1 2 3 4 5 6 7 8 9
を持っていますスマートなルックアップを持っているので、バイナリ検索を使用して、左端に0があると想定します。これにより、0が見つからないことになります。
(注:。これは単なる簡単な例ではないセットが実装されている方法についての明確な説明)
キーへの参照がconst
参照がある理由で、あなただけのconstを呼び出すことができますなぜ(マップ上のキーにも同じことが言えます)。
オブジェクト内の変数を変更しようとしているので、__const__を 'セッター'にしようとすると問題が発生します。もしそうでないなら、鍬は私がそれをすることができますか? –
@dfsfgsfg thatsすべてのポイント。セットに格納されたオブジェクトは、挿入した後には変更しないでください。これは、今説明した問題を引き起こす可能性があるためです。 – Hayt
set
は常にconst
というオブジェクトを返します。あなたのループでは、*it
はconst Item
を指します。メンバー関数get_count()
を呼び出そうとしていますが、const
の資格がありません。つまり、const
オブジェクトでは呼び出すことができないため、失敗します。
あなたの機能const
をマークすることによってこの問題を解決することができます
int get_count() const { return _count; }
^^^^^^^
注意:あなたはその戻り値の型を使用して何の副作用ではなくを持っていない関数を呼び出しています。これは実際に何もしません。
「ゲッタ」の代わりに「セッター」を使用するとどうしたらよいですか?変数を変更する必要があるからです。/ –
@dfsfgsfg setterをセット内で使用することはできません。 – Barry
あなたの関数はconstである必要があります。 – Hayt
@Hayt "_ここにオブジェクトのオブジェクトにアクセスできないようにする必要のあるconst型はありません"という理由を説明する必要があります。 –
@GillBatesはい私は実際には、追加の説明でそれに答えを書くことを考えていた – Hayt