出于某种原因,我在编辑unordered_map中的值时遇到问题,并且想知道我做错了什么。
在以下代码中,parameter
是一个结构。由于某种原因,以下代码抛出语法错误,而不是喜欢[。
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;
}
在相应的.h文件中声明的字典id为:
private:
std::unordered_map<std::string, parameter> * param_name_to_data = nullptr;
我做错了什么?
答案 0 :(得分: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
但最后一个是不鼓励的。