Iterator -> auf Funktion zugreifen
-
Hallo,
Ic habe folgende Situation:
class test { private: static std::set<test*> Tests; public: test() { Tests.insert(this); } Refresh() {} static void RefreshAll() { for(std::set<test*>::iterator i = Tests.begin(); i != Tests.end(); i++) { i->Refresh(); //Geht nicht, Compilerfehler } } }; std::set<test*> test::TestsDie Fehler
error C2839: Ungültiger Rückgabetyp 'test **' für überladenen Operator '->' error C2039: 'Refresh': Ist kein Element von 'std::_Tree<_Traits>::iteratorWie kann ich auf die Funktion zugreifen, bzw. was mache ich falsch?
Danke schon im Voraus.
mfg
mr x
-
(*i)->Refresh();
-
Mr X schrieb:
Wie kann ich auf die Funktion zugreifen
Da der iteratir selber nochmal auf einen Pointer verweist, müsste es mit
(*i)->Refresh()gehen.Mr X schrieb:
was mache ich falsch?
Du packst Pointer in den Container - muss das sein? Wenn du die Elemente polymorph behandeln willst kommst du natürlich nicht drumherum.
Vor kurzem wurde hier ein Iterator-Wrapper vorgestellt, der extra für Container mit Pointern gedacht ist (bzw. allgemein für Iteratoren, die auf Pointer verweisen:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1735620.html
Du könntest dann entsprechend einen PtrIterator<std::set<test*>::iterator> nehmen und den normal dereferenzieren.
-
Danke für die Hilfe, es funktioniert.
Leider verwendet der PtrIterator Boost, das ich eigentlich nicht verwenden möchte... Darum nehme ích erstmal diese Lösung: (*i)->Refresh()
-
Mr X schrieb:
Leider verwendet der PtrIterator Boost, das ich eigentlich nicht verwenden möchte...
Gibts n Grund? (Außer evtl. "hab ich nicht installiert" oder "kenn ich nicht -> mag ich nicht")
-
Eigentlich müsste es auch ein
for_each(Tests.begin(), Tests.end(), mem_fun(&test::Refresh));tun.