我仍在探索 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)
通过改变 lstring
至 listing
,所以我假设从构造函数传递列表由于某种原因不起作用,或者非成员函数不能更改成员变量,但这些似乎是我的编译器很容易做的事情接上。
我的编译器没有发现代码有任何问题,只是当我运行成员列表始终具有的可执行文件时 .size()
共 0 个。
最佳答案
您应该通过引用传递 lstring
:
istream& get_strings(istream& in, list<string>& lstring)
代码按编写的方式编译和工作:传递 lstring 的 value,从而复制它。所有更改都在临时对象上进行,然后在对象被销毁时丢弃。
关于c++ - 为什么传递给函数的成员变量没有被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587472/