C ++ List Iterator打印列表时不兼容

时间:2012-06-16 18:09:42

标签: c++ iterator

好吧,伙计们,我一直在寻找这个错误的答案,但我没有针对我的案例。 我有一个类User,每个User都有自己的Computers列表,类Computer由这三个类(Operative Sistem,Memory和Processor)组成。因此,Computer有自己的toString,它从上面命名的组件中调用特定的toString。

所以...用户有他的属性列表computerList;

在我打电话给Controler的其他课程中,我有一个从特定用户打印计算机列表的功能。 这是我的功能:

void printComputerList(User* u){
    list<Computer*>::iterator itr;
    for(itr=u->getComputerList().begin(); itr!=u->getComputerList().end(); itr++){
        cout<<(*itr)->toString(); //(*itr) calls its own toString implemented in the class Computer
    }
}

所以,当我运行程序时,当我选择打印我已填充的列表时 我从标题中得到错误。 我想这可能是一些混乱之间的混淆?

PD:如果是必要的话,我可以发布剩下的代码

谢谢!

1 个答案:

答案 0 :(得分:1)

临时列表存在(至少)一个问题。固定版本看起来像:

void printComputerList(User* u){
  list<Computer*> const computers = u->getComputerList();
  list<Computer*>::const_iterator it = computers.begin();
  while (it != computers.end())
  {
    cout << (*it)->toString(); //(*it) calls its own toString implemented in the class Computer
    ++it;
  }
}

你确定,列表上的指针是有效的(非空,不是悬空)吗?