3

以下のコード:

#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」に到達する方法ですか? ありがとう。

4

4 に答える 4

6

あなたがしたい

(*it)->printHello();

*itは格納されたポインタを返し、それA*からのみ適用できます->

于 2013-09-27T19:58:22.710 に答える
2

次の行を変更するだけです

it->printHello(); 

(*it)->printHello(); 

operator*() は、コンテナーに含まれるデータ (この場合はポインター) へのアクセスを提供します。コンテナーでポインターを使用しない場合は、operator->() を使用するだけでも機能します。

于 2013-09-27T20:08:16.700 に答える
1

ダニエルの答えを拡張させてください。

変数の前にアスタリスクを付けると、「逆参照」と呼ばれます。このように使用すると、アスタリスクは「逆参照演算子」になります。簡単に言えば(あなたがどのレベルの理解を持っているかわかりません)、*pMyPointerpMyPointerが指していたのはオブジェクトであるかのように機能します。それが Pointer への Pointer であった場合、結果は Pointer だけになります。

例として、ポインターでメソッドを呼び出すときは、 Into Operator を使用します->

これら 2 つは、多くの場合、同じことを行います。

pMyPointer->MyFunction();

(*pMyPointer).MyFunction();

C++ イテレータの場合、逆参照演算子は上書きされ、その位置に格納されているオブジェクトが返されます。->この場合、その位置に格納されるのはポインターであるため、そこに別の逆参照演算子を挿入しない限り、引き続き使用する必要があります。

于 2013-09-27T20:08:07.747 に答える
1

逆参照itすると A へのポインターが得られ、メソッドまたはデータ メンバーにアクセスする必要があります。

だから使用:

(*it)->printHello();

于 2013-09-27T20:01:45.487 に答える