2014-06-05 20 views
6

Jesteśmy dwojgiem uczniów i mamy teraz wielki epicki problem, którego nie możemy rozwiązać. Poprosiliśmy naszego nauczyciela o pomoc, ale on nie może nam pomóc, więc naszą ostatnią szansą jest to forum!Jak uzyskać dostęp do drugiego iteratora map?

Wykonujemy projekt: interpreter poleceń plików NPI.

map<string,void(Interpreteur::*)()>::iterator trouve = interpreteur.myMap.find(saisie); 
if(trouve == interpreteur.myMap.end()) 
    cerr<<"command not found"<<endl; 
else 
    (trouve->*second)(); 

Musimy użyć obiektu o nazwie "map", ale nie możemy uzyskać drugiego parametru o nazwie .. "Second". Czemu? Bloki kodu powiedział nam, że błąd jest w "inny", tu jest błąd:

'second' was not declared in this scope.

Próbowaliśmy też:

map<string,void(Interpreteur::*)()>::iterator trouve = interpreteur.myMap.find(saisie); 
if(trouve == interpreteur.myMap.end()) 
    cerr<<"command not found"<<endl; 
else 
    (trouve.second)(); 

i kod bloki odpowiedział:

error: 'std::map, void (Interpreteur::*)()>::iterator' has no member named 'second'

Jeśli ktoś może nam pomóc, uratuje nasz projekt, musimy zakończyć go na jutro. Będziemy bardzo wdzięczni.

Dziękuję bardzo za pomoc, możemy odpowiedzieć na pytania, czy są jakieś :)

Odpowiedz

5

A std::map punkty iteracyjnej do pary. Tak, aby uzyskać dostęp drugi element pary, w tym celu:

trouve->second 

pamiętać, że w przypadku, rodzaj tego drugiego elementu jest „wskaźnik do funkcji składowej o Interpreteur”, tak to nazwać, trzeba zapewnić Obiekt Interpreteur. Coś takiego:

(interpreteur.*(trouve->second))() 
Powiązane problemy