修改全局class实例的值

Modify the value of global class instance

我有这个 class 定义:

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

如果我在其他函数中打印值,则会打印最早的值。

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

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

感谢您的宝贵时间,

此致。

问题是您 range-for loop 中的 ei 是一个 而不是参考。也就是说它是容器中元素的副本,修改副本当然不会修改原来的。

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

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