2012-03-15 9 views
9

Possible Duplicate:
C++ STL set update is tedious: I can't change an element in placeのstd ::設定イテレータ自動的にconstの

私は、問題を抽出し、simplicities酒の名前などを変更しました。基本的には

...後で私はその値を確認し、それらを変更できるように、クラスへの参照を持っているしたいのですが、私はクラスをインスタンス化し、私がのstd ::セットでそれを買いだめ

単純化されたコード:

 MyClass tmpClass; 
     std::set<MyClass > setMyClass; 
     setMyClass.insert(tmpClass); 
     std::set<MyClass >::iterator iter; 
     iter=setMyClass.begin(); 
     MyClass &tmpClass2=*iter; 

とエラー:

error C2440: 'initializing' : cannot convert from 'const MyClass' to 'MyClass &' 

(私は、エラーメッセージの一部削除 "MVB ::ファイル名を指定して実行::" あまりにもそれをクリアする。)

私は、コードの最後の行に先行する「のconst」を追加した場合、その後、すべてがうまく動作

が、その後、私は値を変更することはできません...

はこの正常な動作ですし、私は、たとえば、削除する必要がありますデータ、値を変更して元に戻しますか?

これはセットのソートと関係がありますが、ソートに使用する変数には触れません。

答えて

12

私はあなたがwon't touch the variables that are used for the sortingあなたがこのようなconst_castを使用してこの回避することができ、特定のとおりです。

MyClass tmpClass; 
    std::set<MyClass > setMyClass; 
    setMyClass.insert(tmpClass); 
    std::set<MyClass >::iterator iter; 
    iter=setMyClass.begin(); 
    const MyClass &tmpClass2=*iter; 

    MyClass &tmpClass3 = const_cast<MyClass&>(tmpClass2); 

また、あなたがmutable.

+2

としてあなたが変更しようとするクラスのメンバを宣言することができあなたはこれをすることができますが、それは悪い習慣です。 –

12

はい、これが想定されています。すでにセット内にあるオブジェクトを編集できた場合、適用されたソート順は適用されなくなり、未定義の動作につながります。

関連する問題