gpt4 book ai didi

c++ - 使用迭代器 C++ 打印 std::list 的元素

转载 作者:行者123 更新时间:2023-11-30 02:35:05 26 4
gpt4 key购买 nike

我正在尝试遍历 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;}

list我正在迭代的是 A 类型(这是抽象的)并包含它的派生类的对象。

最佳答案

(*i​​t) 返回一个智能指针引用,因此您需要再次取消引用它。

(**it).print()(*i​​t)->print()

或者,如果您想连续调用多个函数,您可能会发现这样更简洁:const auto& animal = **it; animal.print();

关于c++ - 使用迭代器 C++ 打印 std::list 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com