我有这个类定义:
class event {
public:
wstring type;
int pos;
int sen;
event(const string &t) : type(util::string2wstring(t)) {}
~event() {};
};
和全局变量:
list<event> events;
此变量在一个函数中初始化,之后我想修改此事件的不同值,如:
for(auto ei : events) {
ei.pos = (*w).get_position();
ei.sen = sen;
cout << "pos: " << ei.pos << " in sentence " << ei.sen << endl;
++w;
++sen;
}
event ei = events.front();
cout << "pos2: " << ei.pos << " in sentence2 " << ei.sen << endl;
然后第一个cout打印新pos和sen的正确值,但第二个(在范围之外)打印最旧的值。
如果我在其他功能中打印值,则会打印最旧的值。
我认为问题是没有对全局变量的引用访问,但这是真的吗?
最重要的是,我该如何解决?
感谢您的时间,
问候。
答案 0 :(得分:1)
问题是range-for loop中的ei
是值而不是参考。这意味着它是容器中元素的副本,修改副本当然不会修改原始文件。
要使用引用,您需要指定它:
for(auto& ei : events) { ... }
// ^
// Note ampersand here