2016-04-03 93 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; 

或轉動指針引用第一

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

你也可以使用的

param_name_to_data->operator[] (name) = param 

醜陋的文字形式,但最後一個是灰心。

+0

我以爲我曾經見過 - > []代碼之前的某處,這就是我試圖使用它的原因。有沒有原因被禁止? – user650261

+1

請參閱編輯 –

+0

謝謝。我仍然感到奇怪的是,它無法智能地搜索任何其他運營商的縮寫。這不是什麼大不了的事情,如果存在一些與語法樹相關的原因或者編譯器無法完成這一步,我只是很好奇。 – user650261