【问题标题】:Pointer list c++指针列表 C++
【发布时间】:2013-09-27 19:56:58
【问题描述】:

以下代码:

#include <iostream>
#include <list>
class A
{
    public: 
    void printHello(){std::cout << "hello";}
};
int main(int argc, char *argv)
{
    std::list<A*> lista;
    lista.push_back(new A());
    for(std::list<A*>::iterator it=lista.begin();it!=lista.end();++it)
    {
        //how to get to printHello method?
        //it doesn't work
        it->printHello();       
    }   
    return 0;
}

此代码不起作用。我的问题是如何通过迭代器获取方法'printHello'?谢谢。

【问题讨论】:

    标签: c++ list pointers iterator std


    【解决方案1】:

    你想要

    (*it)->printHello();
    

    因为*it 返回存储的指针A*,然后才可以应用-&gt;

    【讨论】:

    • 或者在现代编译器上只是for (auto a : lista) { a-&gt;printHello(); }
    【解决方案2】:

    只需更改以下行

    it->printHello(); 
    

    (*it)->printHello(); 
    

    operator*() 可以访问容器中包含的数据,在您的例子中是一个指针。当不在容器中使用指针时,只使用 operator->() 也可以。

    【讨论】:

      【解决方案3】:

      取消引用it会给你指向A的指针,然后你需要访问方法或数据成员。

      所以使用:

      (*it)-&gt;printHello();

      【讨论】:

        【解决方案4】:

        让我扩展丹尼尔的答案。

        当您在变量前面加上星号时,称为“取消引用”。以这种方式使用,星号是一个“取消引用运算符”。简单地说(我不知道您的理解程度如何),*pMyPointer 就像 pMyPointer 指向的对象一样。如果它是指向指针的指针,那么结果就是指针。

        例如,当您在指针上调用方法时,您使用 Into 运算符 -&gt;

        这两个经常做同样的事情:

        pMyPointer-&gt;MyFunction();

        (*pMyPointer).MyFunction();

        在 C++ 迭代器的情况下,取消引用运算符被覆盖以返回存储在其位置的对象。在这种情况下,存储在它的位置的是一个指针,所以你仍然必须使用-&gt;,除非你在其中插入另一个取消引用运算符。

        【讨论】:

          猜你喜欢
          • 2012-06-07
          • 2017-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多