我有以下功能
void myfun(std::string &str);
我正在调用此函数:
stringstream temp("");
temp << "some string data" ;
myfun(temp.str());
但我收到了以下错误:
error: no matching function for call to ‘myfun(std::basic_stringstream<char>::__string_type)’
和
no known conversion for argument 1 from ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’ to ‘std::string& {aka std::basic_string<char>&}’
如何通过引用传递此字符串?
答案 0 :(得分:4)
为什么你需要这个?为什么myfun
会收到引用,而不是const
? std::stringstream::str
返回std::string
,即临时对象,无法绑定到lvalue-reference
。
您可以将副本发送到功能
std::string tmp = temp.str();
fun(tmp);
如果您不想修改功能str
中的fun
,可以将其重写为
void myfun(const std::string& str)
答案 1 :(得分:2)
str
按值返回,即temp
中内部字符串的副本。您无法通过非const
引用传递副本。
您可以将功能签名修改为:
void myfun(const std::string &str);