修改全局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
我有这个 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