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
returnvalue\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,这是无法指定的表达式。更准确的说法是,返回引用的表达式就是返回“指针本身”的表达式。其他表达式则返回指针的值或该指针的副本。