2015-05-21 48 views
5

Neden şu hatayı alıyorum: geçersiz başlatma 'std :: vector :: reference {aka std :: _ Bit_reference}' türünde bir rengin değerinden 'bool &' türünün referansı? bir lvalue olmalıdır böylecehata: "bool &" türünün const olmayan başvurusunun geçersiz bir şekilde başlatılması "std :: vektörünün bir rıhtımından" vektör <bool> :: reference {aka std :: _ Bit_reference} '

vector<vector<bool>> vis; 
bool& visited(int x, int y) 
{ 
    return vis[x][y]; //error 
} 

olarak bildiğim kadarıyla operatör [] vektöründe, başvuru verir, ancak çalışmıyor. Çalıştırmak için ne yapmalıyım?

+0

Belgelerde kullandığınız türden bakmayı mı unuttunuz? –

cevap

10

Bunun nedeni, std::vector<bool>'un neye benzediği değil. uzay optimize var ve her eleman için tek bir bit kullanır -

Orada tip bool ile std::vector için uzmanlık bu.

Bu işlevselliğe ihtiyacınız varsa uint8_t veya benzeri bir şeyi kullanmayı deneyebilirsiniz. Ya da bool&'a değil bool'a dönün.

operator[] tarafından döndürülen başvuru, standart bir başvuru değil, buradaki şeyleri karmaşıklaştıran bir proxy sınıfıdır.

Ve diğerleri:

burada bu konuda benzer bir çok soru vardır. std::vector<bool> uzmanlığı hakkında daha fazla bilgi edinin.

4

Normalde, vector<bool> hariç vector<T> için tam olarak ne olduğu varsayılmıştır. Orijinal C++ 98 standardı, bit paketli bir vektör olarak belirtildiğini ve bu nedenle tek tek elemanlara yapılan referansların imkansız olduğunu belirtti.

Bu, bir sakınca hatası olarak kabul edildi, ancak geriye dönük uyumluluk, artık değiştirilemeyeceği anlamına geliyor.