我已经在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«in»* ListItem.std :: _ List_iterator&lt; _Tp&gt; :: operator-&gt;()«,其中 指针类型是»SecondClass *«(可能是» - &gt;«意味着)
(对不起,我不能给你正确的错误信息。我必须将它从德语翻译成英语,我不会用英语翻译)
我真的没有看到问题。有人有想法吗?
亲切的问候
答案 0 :(得分:2)
在您的代码中,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();
}