2016-03-30 2 views
0

私はC++を初めて使用しており、ベクターの要素にアクセスするのに少し問題があります。クラスAに体mystructへのポインタのベクトルである:構造体へのポインタのベクトル+ポインタ型のベクトルで、インターレーターが指す要素にアクセスする必要があります

struct myStruct{ 
int val; 
string name; 
}myStruct; 

Class A{ 
... 
vector<myStruct*> vec; 
B create()const; 
} 

Class B{ 
... 
string Name(); //return name of current struct 
vector<myStruct*>::iterator beginning; 
int offset; //offset from the beginning 
} 

クラスA、クラスBのオブジェクトが作成される方法create()constを有しています。それはある種のイテレータのように動作し、ある種のプロパティを持つvecの一部になると考えられています。方法Name()は私がClass Bの新しいオブジェクトを作成し、lower_bound()によってvecの反復部分の先頭を選択して、new_object.beginningに入れA.create()でpossition vec[offset]

myStructからnameを返すことになっています。

B.Name()を実装したいときは、イテレータbeginningを移動して逆参照することで、vecの構造体の要素にしかアクセスできません。コマンドの正しい形式は何ですか、それは私が望むことです - イテレータbeginningを正しく参照しないでください。

私のIDEでの完了は*(*(beginning + offset))->nameのようなものに私をリードしているが、それは私がやりたいだろうコマンドの正しい形式であり、何Pointer type is required

答えて

0

エラーを示し - イテレータが始まる間接参照正しく? beginning

タイプbeginning + offsetvector<myStruct*>::iterator
タイプは*(beginning + offset)
タイプはmyStruct要素の名前のメンバーにアクセスするにはmyStruct*

でもvector<myStruct*>::iteratorです、あなたは(*(beginning + offset))->name

にあなたが使用する必要があります一時的なコードを使用してコードを理解しやすくなります。

myStruct* elementPtr = *(beginning + offset); 
elementPtr->name; 
関連する問題