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::Tests
    

    Die Fehler

    error C2839: Ungültiger Rückgabetyp 'test **' für überladenen Operator '->'
    error C2039: 'Refresh': Ist kein Element von 'std::_Tree<_Traits>::iterator
    

    Wie 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.


Anmelden zum Antworten