【问题标题】:Derefencing an iterator pointing to a custom class取消引用指向自定义类的迭代器
【发布时间】:2020-07-14 22:36:53
【问题描述】:

我有一组正在迭代的类对象(Fighter),偶尔会调用该类的成员函数。当我尝试调用迭代器指向的对象的成员函数时,似乎我错误地取消引用了我的迭代器。

std::cout << (*iter)->getFrame(text);

我收到以下编译器错误:

错误:“->”的基本操作数具有非指针类型“const Fighter”

【问题讨论】:

    标签: c++ pointers data-structures iterator


    【解决方案1】:

    您可以直接在iter 上使用-&gt; 运算符。如果你想先取消引用,你可以使用. 操作符:(*iter).getFrame(text);

    std::cout << iter->getFrame(text);
    

    std::cout << (*iter).getFrame(text);
    

    【讨论】:

      【解决方案2】:

      错误是因为您的容器显然不包含指针类型作为其元素类型。取消引用迭代器会为您提供对容器中元素的引用,例如:

      container::value_type &element = *iter;
      

      如果元素类型不是指针,并且该类型没有重载 -&gt; 运算符(例如,智能指针类型通常会重载),那么您不能使用 -&gt; 运算符来访问元素的成员:

      element->getFrame(text); // error!
      

      您需要改用. 运算符:

      element.getFrame(text); // OK!
      

      回到上下文中,你会得到这样的结果:

      std::cout << (*iter).getFrame(text); // OK!
      

      另一种方法是在迭代器本身上使用-&gt; 运算符,它会为您取消对迭代器的引用,以便您可以在同一表达式中访问元素的成员:

      std::cout << iter->getFrame(text); // OK!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2021-06-10
        • 2013-12-17
        • 2012-11-08
        • 2014-12-26
        • 2015-01-23
        • 1970-01-01
        相关资源
        最近更新 更多