C++ c+中的指针列表+;

C++ c+中的指针列表+;,c++,list,pointers,C++,List,Pointers,我想做的是 for (list<cPacket *>::iterator i = cache.begin(); i != cache.end(); i++){ if( strcmp(i->getName(),id) == 0 ){ return true; } } for(list::iterator i=cache.begin();i!=cache.end();i++){ if(strcmp(i->getName(),

我想做的是

for (list<cPacket *>::iterator i = cache.begin(); i != cache.end(); i++){
        if( strcmp(i->getName(),id) == 0 ){
            return true;
        }
}
for(list::iterator i=cache.begin();i!=cache.end();i++){
if(strcmp(i->getName(),id)==0){
返回true;
}
}
其中,
getName
是类cPacket的函数,但它不起作用,我也尝试了
i.operator->()->getName()
,然后再次执行nothing

有人能帮我吗

(*i)->getName()

是您要查找的对象。

*i
取消对迭代器的引用。由于列表的数据类型是指向cPacket的指针,因此需要应用
->
操作符来访问其成员。正确的进位需要括号:

(*i)->whatever()
替换

list<cPacket *>::iterator i
list::迭代器i

list*::迭代器i

@pavlos:您可以将迭代器视为指向容器元素的指针。但在本例中,容器中的元素是指针
(*i)
将从容器中为您提供指针,然后您可以使用
->getName()
调用它所指向的对象上的函数。*i取消引用指针,或者在本例中,取消引用迭代器。它与->操作符非常相似-您也可以执行(*ptr).getName()而不是ptr->getName()。在本例中,由于您有一个包含指针的迭代器,因此首先使用*取消对迭代器的引用,然后使用->取消对指针的引用。再次抱歉,但我按照您所说的那样尝试了,然后添加以下行:void ProxyServer::addURLToCache(cPacket*url){if(numourlsincache<3){cache.push_back(url);numourlsincache++}否则,如果看不到更多的代码,就很难判断是否存在此问题。可能是*url为空或无效指针。尝试取消引用空指针可能会导致崩溃。类型
list*::iterator
在语法上是非法的,更不用说它与
cache.begin()的返回类型不等效
cache.end()
。这就是它无法编译的两个原因。@Fred,我刚看过你的编辑。他不知道问题出在哪里(除了含糊不清的“不工作”),并且您通过将
list::iterator
更改为
list::iterator
编辑他的代码来修复了编译器问题。在回答中这样做不是更好吗?我没有更改这类内容。模板参数没有显示,因为代码没有格式化,并且它们被剥离为糟糕的HTML。请查看原始编辑。我所做的只是代码格式化。
list<cPacket>*::iterator i