使用iterator c ++打印std :: list的元素

时间:2015-11-29 23:06:20

标签: c++ c++11

我正在尝试遍历std::list(包含)对象并打印一些方法,但编译器抱怨 'print': is not a member of 'std::shared_ptr<A>'但是,如果我创建了一个对象std::shared_ptr<A> animal(*it);并调用animal.print(),它会正常工作,为什么会这样?下面是我遇到问题的函数(它也是我的大型程序中涉及大量多态的一小部分)

friend std::ostream& operator<<(std::ostream& out, const Hand& _hand) {         

            std::list< std::shared_ptr<A>>::const_iterator it = _hand.hand.begin();    
            std::shared_ptr<A> animal(*it);  
             animal.print(); //workss  
            while (it != _hand.hand.end()) {            
            it->print();   //doesn't work
                ++it;


            }

     return out;}

迭代的listA类型(它是抽象的)并包含它的派生类的对象。

1 个答案:

答案 0 :(得分:3)

(*it)返回智能指针引用,因此您需要再次取消引用它。

(**it).print()(*it)->print()

如果你想连续调用几个函数,你可能会发现这个更整洁:const auto& animal = **it; animal.print();