c ++迭代器显示不正确的值,但直接访问对象显示正确的值

时间:2018-04-11 18:26:04

标签: c++ object vector iterator

我正在尝试确定我的代码出了什么问题,而且我完全不知道问题是什么。我有一个迭代器,它在向量中返回对象的错误值,即使在GDB中打印该对象显示正确的字段。循环内的代码与此特定问题无关。 我在下面的循环中使用的三个对象和函数是

class User{
  string password;
  string username;

  string getName() {return username}
  string getPass() {return password}
};

class Room{
  vector<User> users;
  vector<Message> messages;
  string name;

  vector<User> getUsers() {return users}
  vector<Message> getMessages() {return messages}
  string getName() {return name}
};

class Message{
  User sender;
  string message;

  User getSender() {return sender}
  string getMessage() {return message}
};

我的循环中的代码是

vector<Room>::iterator roomIt;
vector<Message>::iterator messIt;

for(roomIt = rooms.begin(); roomIt < rooms.end(); roomIt++) {
  for (messIt = roomIt->getMessages().begin(); messIt < roomIt->getMessages().end(); messIt++) {
    .........
  }
}

在gdb中,当我使用print roomIt->getMessages().begin()时,我得到了

{sender = {password = "robin", username = "batman"}, message = "hello"}

但是,当我使用print messItprint *messIt时,我会

{sender = {password = "batman", username = "hello"}, message = "robin"}

可能导致这种差异的原因是什么?我完全迷失了,因为我无法看到打印对象是如何提供正确的输出,同时设置等于该对象的messIt引用会改变值。

0 个答案:

没有答案