我已经定义了自己的类,并将它们的对象存储在std:list中。现在,我想了解所有元素,但是出了点问题-我希望阅读起来不会太复杂:

std::map < long, FirstClass*> FirstClassMap;
std::map < long, FirstClass* >::iterator it;
it=this->FirstClassMap.begin()
//initialization of FirstClassMap is somewhere else and shouldn't matter.

list<SecondClass*>::iterator ListItem;
list<SecondClass*> depList = it->second->getSecondClassList();

for(ListItem = depList.begin(); ListItem != depList.end(); ++ListItem)
{
    /* -- the error is in this Line -- */
    FirstClass* theObject = ListItem->getTheListObject();
    std::cout << theObject->Name();
}


然后是功能:

SecondClass::getTheListObject()
{
    return this->theObject; //returns a FirstClass object
}

FirstClass::Name()
{
    return this->name //returns a string
}


在这里我得到了错误


  方法“ getTheListObject”无法解析





  错误:»*中的元素请求»getTheListObject«
  ListItem.std :: _ List_iterator :: operator->()«,其
  指针类型为»SecondClass *«(可能是»->«)


(很抱歉,我无法为您提供正确的错误消息。我必须将其从德语翻译成英语,但我没有用英语得到这些信息)

我没有真正看到问题。有人知道吗?

亲切的问候

最佳答案

在您的代码中,ListItem不是SecondClass*的实例,它是SecondClass*迭代器的实例。您必须取消引用迭代器才能访问基础对象。因此,您的for循环应类似于:

for(ListItem = depList.begin(); ListItem != depList.end(); ++ListItem)
{
    FirstClass* theObject = (*ListItem)->getTheListObject(); //Dereference the iterator,
                                                             //then call the method.
    std::cout << theObject->Name();
}

10-08 00:41