2012-03-15 22 views
9

Possible Duplicate:
C++ STL set update is tedious: I can't change an element in placestd :: set yineleyici otomatik const

Ben kolaylıklar uğruna bu kadar sorunu çıkarılan ve isimleri değişti ve. Temelde

... daha sonra ben onun değerlerini kontrol edin ve bunları değiştirebilir böylece sınıfına başvuru yaptırmak istiyorum, ben bir sınıf örneğini ve ben bir std :: set içinde stok

basitleştirilmiş kod:

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

ve hata:

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

(Ben hata mesajı bölümlerini kaldırıldı, "MVB :: Run ::" de bunu temizlemek için.)

ben eklemek

bu normal bir davranış mı ... kodunun son satırına bir önceki 'const' sonra her şey iyi çalışıyor ama sonra değerini değiştiremezsiniz ve ben, diyelim ki, kaldırmak zorunda veriyi değiştir, değerleri değiştir ve tekrar yerine koy

Bunun, kümenin sınıflandırmasıyla ilgili bir ilgisi olduğunu hissediyorum, ancak sıralama için kullanılan değişkenlere dokunmayacağım.

cevap

12

Eğer won't touch the variables that are used for the sorting Böyle bir const_cast kullanarak bu geçici bir çözüm olabilir kesindir I: Alternatif

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); 

, size mutable.

+2

olarak değiştirmek niyetinde sınıfın üyeleri olduğuna dair karar Bunu yapabilirsin, ama bu kötü bir uygulama. –

12

Evet, bu bekleniyor. Önceden kümede bulunan nesneleri düzenleyebiliyorsanız, uygulanan sıralama düzeni artık uygulanmayabilir ve bu da tanımlanmamış davranışlara yol açabilir.

İlgili konular