c++ - 为什么传递给函数的成员变量没有被修改?

标签 c++ class

我仍在探索 C++,试图弄清楚它是如何工作的,并遇到了一些让我困惑的事情。

我有一个只包含 list<string> 的类并且有一些成员函数

class String_list {
      public:
            String_list(istream&);
            //other functions
            list<string> listing;
};

然后我编写了我的构造函数以使用非成员函数

String_list::String_list(istream& in) { get_strings(in, listing); }

istream& get_strings(istream& in, list<string> lstring)
{
  if(in) {
       lstring.clear();

       string word;

       while (in >> word) 
               lstring.push_back(word);

       in.clear();
       }
  return in;
 }

问题是,尽管 get_string功能似乎有效,它不会改变 listing我传递给它的成员变量。

我可以通过制作 get_strings 让它工作具有一个参数的成员函数 (istream& in)通过改变 lstringlisting ,所以我假设从构造函数传递列表由于某种原因不起作用,或者非成员函数不能更改成员变量,但这些似乎是我的编译器很容易做的事情接上。

我的编译器没有发现代码有任何问题,只是当我运行成员列表始终具有的可执行文件时 .size()共 0 个。

最佳答案

您应该通过引用传递 lstring:

istream& get_strings(istream& in, list<string>& lstring)

代码按编写的方式编译和工作:传递 lstring 的 value,从而复制它。所有更改都在临时对象上进行,然后在对象被销毁时丢弃。

关于c++ - 为什么传递给函数的成员变量没有被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587472/

相关文章:

c++ - 我可以让 Doxygen 合并不同文件中的命名空间内容吗?

iphone - 对象-C : Creating an object with a String name

java - 抽象类与具体类有何不同?

c# - 如何从通用列表中删除基于带有构造函数的类的项目?

C++计算数字和字符

c++ - STL 中的迭代器和 v.begin() 方法有什么区别?

c++ - 什么时候应该创建自己的异常类型?

c++ - Mongo C++ 批量操作

javascript - 修改对象属性时如何触发回调?

python - 与它们的等效函数相比,python 类慢了多少?