【发布时间】:2014-03-25 16:18:36
【问题描述】:
所以如果我有这样的功能:
void edit(string& s) {
//do something with s
}
我像这样使用它:
std::string str = "Hello";
edit(str);
这将更新str 的值。
但现在我有一个类,其中头文件有一个构造函数,如:
class MyClass {
private:
//something
protected:
std::string& str;
public:
//something
MyClass(std::string& s): str(s){}
};
后来在源文件中,我计算了一个字符串,我想通过传递给构造函数的字符串参数来更新它,但它不起作用。
您能否给我一些想法,我怎样才能使它工作,这样我分配 std::string 值的类变量反映在传递给该类的构造函数的参数字符串中。
谢谢,
更新:
按照建议进行上述更改(使 str 成为参考),我收到此错误:
“错误:str 必须在 cosntructor 基/成员初始化列表中初始化”
更新 - 解决方案:
嗨,所以按照这种方法我似乎找到了解决方案:
class MyClass {
private:
//something
protected:
std::string* str;
public:
//something
MyClass(std::string* s): str(s){}
};
后来,我有:
string mystring;
MyClass(&mystring); 瞧,它似乎运作良好。
【问题讨论】:
-
成员变量 str 中缺少 &... 应该是引用而不是变量...
-
您传递给构造函数的字符串无关紧要。您的对象具有该字符串的 副本。如果您无权访问该副本,则您无权访问。
标签: c++ pass-by-reference