C++ 通过引用传递字符串,并通过C++;

C++ 通过引用传递字符串,并通过C++;,c++,pass-by-reference,C++,Pass By Reference,如果我有一个函数,比如: void edit(string& s) { //do something with s } 我使用它就像: std::string str = "Hello"; edit(str); 这将更新str的值 但现在我有一个类,其中头文件有一个构造函数,如: class MyClass { private: //something protected: std::string& str; public:

如果我有一个函数,比如:

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”

更新-解决方案:

您好,按照这种方法,我似乎找到了解决方案:

  class MyClass {

       private:
          //something
       protected:
          std::string* str;
       public:
          //something

       MyClass(std::string* s): str(s){}
    };
稍后,我有:

string mystring;
MyClass(&mystring)和voilla它似乎写得很好

MyClass(std::string& s): str(s){}

str
s
的内容复制到
str
。由于,
str
不是引用变量,因此它是一个副本,不会影响传递的参数。使类成员成为引用变量。但是要小心传递参数的生命周期。

缺少&在您的成员变量str中。。。应该是引用而不是变量…传递给构造函数的字符串是无关的。您的对象具有该字符串的副本。如果您没有访问该副本的权限,则您没有访问权限。谢谢,但是如果我尝试声明str引用,它将不会编译,并且我会收到错误“未初始化引用变量”?visual studio 2010,但引用成员是否必须立即初始化?但好吧,我很快地再次检查了一遍,这就是初始值设定项列表的目的。您永远都不希望类中有引用成员。@n.m.当然可以,但如果我对bool使用相同的过程,那么您能建议我如何更新作为参数传递给类构造函数的变量吗?(不是引用,而是使用poitner)但是使用std::string时,它似乎失败了