C++ 如何在C++;?

C++ 如何在C++;?,c++,list,pointers,map,iterator,C++,List,Pointers,Map,Iterator,我已经定义了自己的类,并将它们的对象存储在一个std:列表中。现在我想学习所有元素,但出现了一些问题-我希望这不是太复杂,无法阅读: std::map < long, FirstClass*> FirstClassMap; std::map < long, FirstClass* >::iterator it; it=this->FirstClassMap.begin() //initialization of FirstClassMap is somewhere

我已经定义了自己的类,并将它们的对象存储在一个std:列表中。现在我想学习所有元素,但出现了一些问题-我希望这不是太复杂,无法阅读:

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();
}
这里我得到了错误

无法解析方法“getTheListObject”

错误:元素请求»getTheListObject«in»* std::_List_迭代器::运算符->()«,其 指针类型为»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();
}
for(ListItem=depList.begin();ListItem!=depList.end();++ListItem)
{
FirstClass*theObject=(*ListItem)->getTheListObject();//取消对迭代器的引用,
//然后调用该方法。
std::cout Name();
}

可能重复的@πάνταῥεῖ 不,这与外部符号错误无关try
FirstClass*theObject=(*ListItem)->getTheListObject(),您必须取消对迭代器的引用,才能访问列表元素。这要感谢我尝试了*的许多组合,总是小错误;)非常感谢。
for(ListItem = depList.begin(); ListItem != depList.end(); ++ListItem)
{
    FirstClass* theObject = (*ListItem)->getTheListObject(); //Dereference the iterator, 
                                                             //then call the method.
    std::cout << theObject->Name();
}