2016-03-30 35 views
0

Ben C++ için yeni ve vektörün öğeleri çok küçük bir sorun var. Bu işaretçiler için bir vektör sınıfı A myStruct için:Yapıları + işaretçi türü için işaretçi vektöründe interator tarafından işaret edilen öğeler gerekli

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 
} 

sınıfı B sınıfı bir nesne oluşturulur bir yöntem create()const sahiptir. Bazı özellikleriyle, vec'un bir kısmına gitmek için bir çeşit yineleyici gibi çalışılması gerekiyor. yöntem Name(), ben Class B yeni nesne oluşturmak A.create() yılında aşağı konumdayken vec[offset]

üzerinde myStruct itibaren name dönmek lower_bound() tarafından vec ait tekrarlanan kısmının başlangıcını seçin ve new_object.beginning koymak gerekiyordu.

Ben B.Name() uygulamak istiyorum

, ben sadece yineleyici beginning hareketli ve kaldırma tarafından vec yılında yapılar unsurlarını erişebilirler. Bir komutun doğru şekli nedir, istediğimi yapar - yineleyiciyi beginning doğru şekilde dereference?

benim IDE tamamlama *(*(beginning + offset))->name gibi bir şey bana yol vardır, ama sonra bir hataya ne istersem verecek bir komutun doğru biçimi nedir Pointer type is required

cevap

0

gösterir - Yineleyici KQUEUE başlayan doğru şekilde?

tip beginning ait vector<myStruct*>::iterator
beginning + offset tipi de olduğu vector<myStruct*>::iterator*(beginning + offset) ait tipi, sen (*(beginning + offset))->name

You kullanmak gerekir myStruct*

myStruct elemanın adı üyesine erişmek için ise
kodu bir geçici kullanarak anlamak daha kolay olabilir.

myStruct* elementPtr = *(beginning + offset); 
elementPtr->name;