如何在C ++中获取存储在列表中的类对象?

时间:2014-06-27 06:54:05

标签: c++ list pointers map iterator

我已经在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;«意味着)

(对不起,我不能给你正确的错误信息。我必须将它从德语翻译成英语,我不会用英语翻译)

我真的没有看到问题。有人有想法吗?

亲切的问候

1 个答案:

答案 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();
}