所以如果我有这样的功能:
void edit(string& s) {
//do something with s
}
我用它像:
std::string str = "Hello";
edit(str);
这将更新str
。
但是现在我有一个类,其中头文件有一个construtor,如:
class MyClass {
private:
//something
protected:
std::string& str;
public:
//something
MyClass(std::string& s): str(s){}
};
以后在源文件中,我计算一个字符串,我想通过传递给构造函数的字符串参数更新,但它不起作用。
你能否告诉我如何才能完成这项工作,以便我赋予std::string
值的类变量反映在传递给该类构造函数的参数字符串中。< / p>
谢谢,
更新
根据建议进行上述更改(使str成为参考),我收到此错误:
“error:str必须在cosntructor base / member initializer list中初始化”
更新 - 解决方案:
嗨,所以按照这种方法,我似乎找到了解决方案:
class MyClass {
private:
//something
protected:
std::string* str;
public:
//something
MyClass(std::string* s): str(s){}
};
后来,我有:
string mystring;
MyClass(&mystring);
而且它似乎很好。
答案 0 :(得分:0)
MyClass(std::string& s): str(s){}
str(s)
将s
的内容复制到str
。由于str
不是引用变量,因此它是副本,不会影响传递的参数。使类成员成为引用变量。但要小心传递参数的生命周期。