修改全局类实例的值

时间:2016-12-28 15:25:28

标签: c++ class global access

我有这个类定义:

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的正确值,但第二个(在范围之外)打印最旧的值。

如果我在其他功能中打印值,则会打印最旧的值。

我认为问题是没有对全局变量的引用访问,但这是真的吗?

最重要的是,我该如何解决?

感谢您的时间,

问候。

1 个答案:

答案 0 :(得分:1)

问题是range-for loop中的ei而不是参考。这意味着它是容器中元素的副本,修改副本当然不会修改原始文件。

要使用引用,您需要指定它:

for(auto& ei : events) { ... }
//      ^
// Note ampersand here