C++ C++;打印列表时列表迭代器不兼容

C++ C++;打印列表时列表迭代器不兼容,c++,iterator,C++,Iterator,好了,伙计们,我一直在寻找这个错误的答案,但我还没有一个具体的例子。 我有一个类用户,每个用户都有自己的计算机列表,类计算机由这三个类(操作系统、内存和处理器)组成。所以计算机有自己的toString,它从上面命名的组件调用特定的toString 所以…用户有他的心房肌列表 在另一个类中,我称之为Controler,我有一个函数,用于打印特定用户的计算机列表。 以下是我的功能: void printComputerList(User* u){ list<Computer*>:

好了,伙计们,我一直在寻找这个错误的答案,但我还没有一个具体的例子。 我有一个类用户,每个用户都有自己的计算机列表,类计算机由这三个类(操作系统、内存和处理器)组成。所以计算机有自己的toString,它从上面命名的组件调用特定的toString

所以…用户有他的心房肌列表

在另一个类中,我称之为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
    }
}
无效打印计算机列表(用户*u){
列表::迭代器itr;
对于(itr=u->getComputerList().begin();itr!=u->getComputerList().end();itr++){
cout临时列表(至少)有一个问题。固定版本如下:

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;
  }
}
无效打印计算机列表(用户*u){
list const computers=u->getComputerList();
list::const_iterator it=computers.begin();
while(it!=computers.end())
{
cout toString();/(*它)调用在类计算机中实现的自己的toString
++它;
}
}

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

是否
getComputerList()返回引用或值?这样就不起作用了。在堆栈上创建临时列表,获得迭代器和销毁列表。代码总是比英文描述更好。英语不是精确的,这种类型的东西需要精确。C++是关于类型的。我们没有关于类型的信息,所以它是无法回答的。可编译的可运行示例(代码刚好足以显示错误)是的,我没有发布更多代码的原因是因为它是一个大程序,好吧,发布它是大的,即使在User.cpp、Controler.cpp和Computer.cpp之间,但是如果我能得到一些帮助,发布其余代码是没有问题的,作为一个旁白,停止在这样的列表中使用原始指针。至少使用智能指针o您不必自己解除分配所有内容。该死的,它不再崩溃,但现在它不打印任何内容,而且我认为我没有正确地填充列表,因为在将计算机推回到列表后,u->getComputerList().size()显示0我猜,您将列表按值传递给某个填充函数(因此获取临时副本),将元素推到副本,在填充函数退出时销毁副本,而原始列表仍然为空。对吗?