5

これは初心者の質問のように聞こえるかもしれません。vector に格納されたオブジェクトのメンバー関数を呼び出すにはどうすればよいですか? おそらく、私はこのクラスを持っています:

class A {
public:
void foo() {
std::cout << "Hello World"; }
};

次に、いくつかのオブジェクトをベクターに格納します。

std::vector<A*> objects;
A* b;
A* c;
A* d;

objects.push_back(b);
objects.push_back(c);
objects.push_back(d);

ここで、ベクターに格納されているすべてのオブジェクトが独自の foo() 関数を呼び出すループを作成したいと考えています。どうすればいいですか?最初は、次のようなことができると思いました。

objects[2].foo();

でも、このままではいけないようです。

4

4 に答える 4

3

これを行うことができます:

std::vector<A> objects;
A b;
A c;
A d;

objects.push_back(b);
objects.push_back(c);
objects.push_back(d);

objects[2].foo();

正確なエラーについてもう少し具体的に教えてください。おそらく全体の問題は、オブジェクトへのポインタを「。」で参照しようとしていたのではないかと思います。「->」の代わりに。

しかし、はい、一般的に:

1) オブジェクトまたはオブジェクトへのポインターを任意の STL コンテナーに保存できます。

2) コンテナからオブジェクトにアクセスするときに、そのオブジェクトのパブリック メソッドを呼び出すことができます。

于 2013-07-28T05:39:49.143 に答える
2

インスタンスではなく、クラス A へのポインターを作成しました。したがって、ポインター構文を使用してメソッド foo にアクセスする必要があります。すなわち

    for(int i = 0; i < 3; i++) {
      objects[i]->foo();
    }
于 2013-07-28T05:54:31.350 に答える