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!行了。非常感谢:)