C++ 修改全局类实例的值

C++ 修改全局类实例的值,c++,class,global,C++,Class,Global,我有这样一个类定义: 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) {

我有这样一个类定义:

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;
用于(自动ei:事件){
ei.pos=(*w).get_position();
ei.sen=sen;

cout问题在于,您的中的
ei
是一个值,而不是一个引用。这意味着它是容器中元素的副本,修改副本当然不会修改原始元素

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

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

解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,应逐行检查代码。有关更多帮助,请阅读。至少应[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。这不是真的。我调试了我的程序,并在并没有引用访问的情况下发现了问题。请查看答案以查看我的问题。:)然后继续。请调查
auto
的所有用法。目前,
ei
是一个错误你的向量元素的副本,所以当你更改它时,向量中没有任何更改。我正要回答lolYes!行了。非常感谢:)