【问题标题】:Accessing a method of a class object stored in a vector using an Iterator. How?使用迭代器访问存储在向量中的类对象的方法。如何?
【发布时间】:2012-02-24 21:14:29
【问题描述】:

嘿第一个问题我在这里提前非常感谢。 我正在使用一个向量来存储一系列指向 CSquare 类的对象的指针,我想要一个可以传递的迭代器,以便我可以访问某个对象的函数。这是我当前的代码尝试这个没有运气。 IntelliSense 告诉我“没有可用的成员”。

    vector <CSquare*> pSquares;
    //filled in vector
    vector<CSquare*>::iterator tempIt = pSquares.begin();
    tempIt->getName();

不知道还有什么要补充的,但如果您需要任何其他帮助我,请说。

再次非常感谢。

编辑:问题解决了,我不得不取消引用两次。以下代码有效,我想我会留下它,以防其他人需要相同的帮助,谢谢您的关注。

    vector <CSquare*> pSquares;
    //filled in vector
    vector<CSquare*>::iterator tempIt = pSquares.begin();
    (**tempIt).getName();

【问题讨论】:

    标签: c++ object pointers vector iterator


    【解决方案1】:

    请记住,您需要取消对迭代器的引用才能获得指向的东西。因为这是一个vector&lt;CSquare*&gt;,所以你的迭代器实际上是一个指向CSquare的指针,所以你需要这样做:

    (*tempIt)->getName();
    

    【讨论】:

    • 干杯,我在 2 分钟前就知道了 xD,我想只是把它写出来,远离我的代码的其余部分可以帮助我思考它。
    • 这种情况有时会发生。它被称为“橡皮鸭效应”(参见c2.com/cgi/wiki?RubberDucking)。
    • 我知道这个概念,但读起来很有趣,很好地分散了我的工作注意力,现在继续努力。
    【解决方案2】:

    你需要一个额外的解引用:

    (*tempIt)->getName();
    

    原因是您在向量中存储的是指针,因此*tempIt 是对指针的引用,您需要再次取消引用才能访问CSquare 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多