2016-04-03 15 views
0

Herhangi bir nedenle unordered_map öğesinde düzenleme değerleriyle ilgili sorun yaşıyorum ve ne yaptığımı merak ediyorum.unordered_maps işaretçisi olarak erişiliyor

Aşağıdaki kodda, parameter bir yapıdır. Bazı nedenlerden dolayı, aşağıdaki kod bir [sözdizimi hatası] atıyor. Yanlış yapıyorum

private: 
std::unordered_map<std::string, parameter> * param_name_to_data = nullptr; 

:

void MyClass::setParameter(string name, parameter param) { 
    if (this->param_name_to_data == nullptr) { 
     //create it lazily 
     this->param_name_to_data = new unordered_map<string, parameter>(); 
    } 
    this->param_name_to_data->[name] = param; 
} 

sözlük kimliği olarak gelen .h dosyasında bildirilen? derleyici bir üye değişkeni veya bir üye işlev ya arar -> gördüğünde

+2

"unordered_map" öğesini dinamik olarak ayırmanın bir nedeni var mı? –

+0

Muhtemelen statik olarak ayrılmış olarak değiştireceğim. – user650261

cevap

4

param_name_to_data->[name] = param; geçerli bir sözdizimi

değildir. ->[...] ifadesi, [] tek başına bir üye değişkeni veya bir işlev olmadığı için anlamsızdır.

yerine

(*param_name_to_data)[name] = param; 

yazmak veya başvurmak için işaretçi açabilirsiniz ayrıca sonuncusu ancak

param_name_to_data->operator[] (name) = param 

çirkin edebi formu kullanabilirsiniz

auto& map = *param_name_to_data; 
map[name] = param; 

ilk cesareti kırılmış.

+0

Gördüğümü düşünmüştüm -> [] daha önce kod içinde bir yerde, bu yüzden onu kullanmaya çalışıyordum. Yasak olmasının bir sebebi var mı? – user650261

+1

bkz. Düzenle lütfen –

+0

Teşekkürler. Hala başka bir operatörün kısaltmasını akıllıca aramadığı için garip buluyorum. Bu büyük bir anlaşma değil, sadece bir sözdizimi-ağaç-belirsizliği ile ilgili sebep veya derleyici bu adımı yapamaz bir şey varsa merak ediyorum. – user650261

İlgili konular