2016-04-03 11 views
0

何らかの理由で、私はunordered_mapの値を編集する際に問題があり、何が間違っているのか不思議です。ポインタとしてのunordered_mapsへのアクセス

次のコードでは、parameterが構造体です。なんらかの理由で、次のコードは構文エラーを投げていますが、[。私が間違っているのは何

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

辞書IDは、対応する.hファイルで宣言されましたか?コンパイラは、それがメンバ変数やメンバ関数のいずれかを探し->を見たとき

+2

'unordered_map'を動的に割り当てる理由はありますか? –

+0

私はおそらくそれを静的に割り当てられるように切り替えます。 – user650261

答えて

4

param_name_to_data->[name] = param;は有効な構文

ではありません。文->[...]は、[]だけがメンバ変数でも関数でもないので意味がありません。

あなたの代わりに

(*param_name_to_data)[name] = param; 

か、また

param_name_to_data->operator[] (name) = param 

の醜いリテラル形式を使用することができますが、最後の1である第1

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

を参照するためにポインタを回すを書くことができます落胆した。

+0

私は前にコードのどこかで - > []を見たと思っていたので、それを使っていました。禁止されている理由はありますか? – user650261

+1

編集を参照してください –

+0

ありがとうございます。他のオペレータの略語を知的に検索することができないということは、まだ変わっています。それは大したことではないですが、コンパイラがそのステップを行うことができない何らかの構文木のあいまいさに関連する理由がある場合、私は正当に好奇心が強いだけです。 – user650261

関連する問題