繁体   English   中英

如何修复编译错误:类型“std::__1::string&”的非常量引用的初始化无效

[英]How fix compile error: invalid initialization of non-const reference of type 'std::__1::string&

我是 C++ 新手,不知道这段代码有什么问题

 string& GetAddonCmeterString(string& sid) {
     ostringstream oss;
     oss <<  "{"; 
     oss <<     "currentValues : {sid : " << sid << "}"; 
     oss <<  "}";
     string& result = oss.str();
     return result;
 }

编译错误信息:

错误:类型为 'std::__1::string& {aka std::__1::basic_string, std::__1::allocator >&}' 的非常量引用的无效初始化来自类型为 'std::__1 的右值::basic_string, std::__1::allocator >' string& result = oss.str();

编译与否,
不要返回指向局部变量的指针或引用!

GetAddonCmeterString完成时, result将被破坏和GetAddonCmeterString分配,您正在返回一个不再存在的对象的内存地址!

您应该按值返回字符串*:

  string GetAddonCmeterString(string& sid) {
     ostringstream oss;
     oss <<  "{"; 
     oss <<     "currentValues : {sid : " << sid << "}"; 
     oss <<  "}";
     return oss.str();
 }

*字符串不会按值返回,而是会被moved ,但是因为您是 C++ 新手,所以为了讨论起见,让我们保持简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM