C++ 为什么我得到一个表达式是不可赋值的错误

C++ 为什么我得到一个表达式是不可赋值的错误,c++,C++,我不明白为什么我从以下代码中收到“表达式不可赋值”错误: class value_t { public: int a; }; class values_t { public: std::map<std::string, value_t *> list; value_t * operator [] (const std::string & key) { return list[key]; } value_t * get(const std::string

我不明白为什么我从以下代码中收到“表达式不可赋值”错误:

class value_t {
public:
    int a;
};

class values_t {
public:
  std::map<std::string, value_t *> list;

  value_t * operator [] (const std::string & key) { return list[key]; }
  value_t * get(const std::string & key) { return list[key]; }
};

int main(int argc, const char * argv[]) {
  values_t values;

  values.list["aaa"] = new value_t(); // OK
  values["aaa"] = new value_t(); // ERROR
  values.get("aaa") = new value_t(); // ERROR
  return 0;
}
类值\u t{
公众:
INTA;
};
类值{
公众:
地图列表;
value_t*运算符[](const std::string&key){返回列表[key];}
value_t*get(const std::string&key){返回列表[key];}
};
int main(int argc,const char*argv[]{
价值观;
value.list[“aaa”]=新值_t();//确定
值[“aaa”]=新值_t();//错误
value.get(“aaa”)=新值_t();//错误
返回0;
}
我看不出
main
函数的第二行与另一行有什么区别

建议的解决方案是更改value.\t*&

值中的返回类型。list[“aaa”]
返回对指针的引用,该指针可以分配给

values[“aaa”]
values.get(“aaa”)
返回指针本身


将这两个函数的返回类型更改为
value\u t*&
,并保持实现不变。

operator[]
get
return
value\u t*
by value,这意味着
value[“aaa”
value.get(“aaa”)
都是无法分配的

返回类型为非引用的函数调用或重载运算符表达式,例如
str.substr(1,2)
str1+str2
,或
it++

您可以检查的返回类型是什么,它是一个左值引用,然后是
值。列表[“aaa”]
是一个,可以分配


您可以将其返回类型更改为
value\u t*&
,以解决此问题。

您可能希望返回指针的引用,而不是普通指针:
value\u t*&运算符[]
等等。
没有意义。请注意
]
@ODYN Kon
值。获取[“aaa”]
毫无意义。如果有的话,应该是
值。get(“aaa”)
看看如何重载下标运算符。另外,您可能应该避免直接使用
新建
删除
。更喜欢容器和智能指针。具体来说,
值[“aaa”]
值。get(“aaa”)
are,这是无法指定的表达式。更准确的说法是,返回引用的表达式就是返回“指针本身”的表达式。其他表达式则返回指针的值或该指针的副本。