我已经定义了自己的类,并将它们的对象存储在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();
}