3

我有两个从第三个类继承的类,它们存储在一个列表中。

我正在尝试迭代该列表并调用每个类的已实现函数,但是代码无法编译。

这是我的代码:

class A
{   
   public:

   virtual void foo ()=0;
};

class B :public class A
{
   public:

   void foo();
}

class C :public class A
{
   public:

   void foo();
}

std::list<A*> listOfClasses;

listOfClasses.push_back (new B());
listOfClasses.push_back (new C());

for(std::list<A*>::iterator listIter = listOfClasses.begin(); listIter != listOfClasses.end(); listIter++)
{
    listIter->foo()
}

此代码无法编译,我收到以下错误消息 ( for the line listIter->foo()):

'foo' : is not a member of 'std::_List_iterator<_Mylist>'

任何想法为什么?

4

4 回答 4

5

您必须以这种方式使用迭代器:(*listIter)->foo()

于 2014-02-11T16:17:34.993 回答
3

您需要首先取消引用迭代器:

(*listIter)->foo()
于 2014-02-11T16:17:25.483 回答
3

对于某些种类,这里有一个更简单的 C++11 替代语法,它完全避免了这个问题:

for (auto p : listOfClasses)
{
    p->foo();
}
于 2014-02-11T16:34:19.077 回答
2

您的容器包含指针,因此您需要取消引用它们:

(*listIter)->foo();
于 2014-02-11T16:17:22.340 回答