1

まず、というクラスFooがあり、仮想関数が含まれていますint Foo::getId()

私はtypedefを持っています:typedef std::vector<Foo*> FooList;

Foo::FooList *list;次に、このベクトルを定義してロードします。

どうやってアクセスするのだろうと思っていgetId()ました。現在使用していますlist[a].getId();が、コンパイラは言い続けますerror: class std::vector<Foo*, std::allocator<Foo*> > has no member named getId

ご協力いただきありがとうございます!

4

4 に答える 4

2
list->at(a)->getId();

あなたもすることができます

list->operator[](a)->getId();

また

(*(*list)[a]).getId();

または任意の組み合わせ。

listポインタであるため、含まれているポインタと同様に、逆参照する必要があります。逆参照されていないポインターの配列演算子はに追加alistれ、別の場所を指すようになります。

于 2012-11-16T06:41:27.707 に答える
2

あなたはこれを使うことができます:

list->at(a)->getId();

また、。のように添え字を付ける場合、使用法は配列Foo::FooList* listとして扱われることに注意してください。ゼロでなければ、未定義動作になります。また、ポインタではなく、可能な場合は参照(または値)を優先することを検討する必要があります。list[a]a

std::vector<>::at(size_t)のように、ベクトルの要素にアクセスしoperator[](size_t)ます。大きな違いは、operator[]チェックされていないat()ことですが、範囲エラーがある場合はスローされます。

于 2012-11-16T06:44:09.810 に答える
1

この方法を試してください:

(*list)[a]->getId()
于 2012-11-16T06:40:18.037 に答える
1

いくつかのポインターの逆参照が必要です。

(*list)[a]->getId();

(*list)listオブジェクトとしてアクセスできるので、それを呼び出すことができますoperator[]。そしてoperator[]、へのポインタを返しますFoo。そのメソッドは、要素選択演算子を介して呼び出すことができます->。どちらの場所でも、参照解除*または要素選択->のいずれかを使用できます。listただし、そもそもポインタになる必要があるかどうかも考慮する必要があります。

于 2012-11-16T06:40:52.573 に答える