ich bin gerade am Basteln und hab da ein kleines Programm, das nicht so recht funktionieren will. Ich seh den Fehler absolut nicht
#include <iostream> #include <algorithm> #include <functional> #include <vector> class MyClass { public: void myFunc(int i) { std::cout<<i<<"\n"; } }; template<typename C, typename R, typename A> // C: Klassentyp, R: Ergebnistyp, A: Argumenttyp struct mem_fun_bind1_t : public std::unary_function<A, R> { C& c; // Referenz auf Aufruferobjekt R (C::*pMtr)(A); // Funktionszeiger explicit mem_fun_bind1_t( C& _c, R [b]([/b]C::*_pMtr[b])[/b](A) ) : c(_c), pMtr(_pMtr) // Konstruktor setzt Aufrufer und aufzurufende Methode (Zeiger) {} R operator()(A a) // überladen mit Parameter, der von for_each übermittelt wird { return (c.*pMtr)(a); // eigentlicher Methodenaufruf } }; template<typename C, typename R, typename A> // C: Klassentyp, R: Ergebnistyp, A: Argumenttyp mem_fun_bind1_t<C, R, A> mem_fun_bind1(C& c, R (C::*pMtr)(A)) { return mem_fun_bind1_t<C, R, A>(c, pMtr); // Funktor erzeugen } int main() { MyClass myclass; std::vector<int> v; for(int i=0; i<10; ++i) v.push_back(i); std::for_each(v.begin(), v.end(), mem_fun_bind1(myclass, &MyClass::myFunc)); // gewünschtes Endresultat: a.myFunc(*iterator) }
Der Fehler dabei lautet:
Zitat
error: no matching function for call to ‘mem_fun_bind1(A&, void (A::*)(int))’
Danke für eure Tipps!
Dieser Beitrag wurde von Witi bearbeitet: 26. Mai 2009 - 07:58