2016-04-03 19 views
0

Aus irgendeinem Grund habe ich Probleme beim Bearbeiten von Werten in meiner unordered_map und frage mich, was ich falsch mache.Zugriff auf ungeordnete_Maps als Zeiger

Im folgenden Code ist parameter eine Struktur. Aus dem einen oder anderen Grund wirft der folgende Code einen Syntaxfehler, nicht die [.

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

Das Wörterbuch-ID in der entsprechenden .h-Datei deklariert als:

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

Was mache ich falsch?

+2

Gibt es einen Grund, warum Sie die 'unordered_map' dynamisch zuweisen? –

+0

Ich werde es wahrscheinlich auf statisch zugewiesen ändern. – user650261

Antwort

4

param_name_to_data->[name] = param; ist keine gültige Syntax

, wenn der Compiler -> sieht es entweder für eine Membervariable oder eine Elementfunktion aussieht. Die Aussage ->[...] ist bedeutungslos, da [] alone weder eine Elementvariable noch eine Funktion ist.

können Sie schreiben, statt

(*param_name_to_data)[name] = param; 

oder den Zeiger drehen erste referenzieren

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

Sie auch die hässliche wörtlichen Form

param_name_to_data->operator[] (name) = param 

aber die letzte verwenden können, ist entmutigt.

+0

Ich hatte gedacht, ich hätte irgendwo zuvor im Code gesehen -> [], weshalb ich versuchte, es zu benutzen. Gibt es einen Grund, warum es verboten ist? – user650261

+1

siehe bearbeiten bitte –

+0

Danke. Ich finde es immer noch seltsam, dass es nicht intelligent nach der Abkürzung eines anderen Operators suchen kann. Es ist keine große Sache, ich bin nur zu Recht neugierig, ob es einige Syntax-Tree-Ambiguity Grund oder etwas, dass der Compiler kann nicht diesen Schritt tun. – user650261

Verwandte Themen