Funktion als Parameter übergeben



  • Hallo,

    stehe gerade vor dem Problem eine Funktion als Parameter zu übergeben - was bei einer ganz normalen C-Konsolenanwendung auch problemlos geht, aber irgendwas mach ich da falsch wenn ich eine Mitgliedsfunktion einer Klasse an eine andere Mitgliedsfunktion dieser Klasse übergeben will.

    Bei folgendem Code:

    void CTestprojektDlg::test1() {
    	MessageBox("test");
    }
    
    void CTestprojektDlg::test2(void (*f)()) {
    	f();
    }
    
    void CTestprojektDlg::OnButton1() 
    {
    	test2(test1);
    }
    

    beschwert sich der Compiler mit "error C2664: 'test2' : Konvertierung des Parameters 1 von 'void (void)' in 'void (__cdecl *)(void)' nicht moeglich
    Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein" beim Aufruf test2(test1).

    Ist das irgendwas Microsoft-sepzifisches, etc.? Bzw. was mach ich da mit meinem Anfängerwissen falsch?

    thx,
    rabbit



  • sieh mal in den FAQ-Bereich

    bei Klassenmethoden geht das anders.



  • Member-Pointer sind nicht ganz so einfach zu handhaben. Ich geb dir am besten einfach mal ein Beispiel:

    struct A {
      void foo(int x) { }
      void bar(void(A::*f)(int)) { (this->*f)(2); }
      void baz() { bar(&A::foo); }
    };
    


  • oki thx, so funktionierts 🙂


Anmelden zum Antworten