c funktionsaufruf mit c++ methode als paramter



  • Hallo,

    bei untenstehendem Programm möchte ich die funktion testfunkt aufrufen.
    mit einer c funktion als paramter funktioniert es aber mit einer c++ methode als parameter nicht....
    weiss jemand warum???

    danke sagt oli

    class Sampleclass {

    public:

    Sampleclass() // default constructor
    ~Sampleclass(){}; // destructor

    int funkt();

    private:

    };

    #endif

    //constructor
    Sampleclass::Sampleclass()
    {

    }

    //Aufruf der festen C funktion mit dieser methode als parameter funktioniert nicht!!!!
    int Sampleclass::funkt(void)
    {
    cout <<"hallo"<<endl;
    return 0; //OK
    }

    //Aufruf der festen C funktion mit dieser funktion als parameter funktioniert
    void spassfunkt(void)
    {
    cout <<"mist"<<endl;

    }

    //angenommen feste c Funktion die nicht geändert werden kann
    int testfunkt(void (*func)(void))
    {

    cout <<"lalaaa"<<endl;
    return 0;
    }

    int main()
    {

    Sampleclass a;
    cout <<"ich ruf die Funktion auf "<<a.funkt()<<endl;

    testfunkt(spassfunkt); // ich rufe testfunkt mit der spassfunkt als parameter auf -->funktioniert

    testfunkt(Sampleclass::funkt); //Zeile 67 hier liegt der fehler was muss ich ändern damit ich wie in der
    //zeile darüber testfunktmit der der funkt methode als Parameter aufrufen kann??

    return 0;
    }

    Compiler Fehlermeldung :
    In function int main()': :67: error: no matches converting function \funkt' to type `
    void (*)()'
    .cc:33: error: candidates are: int Sampleclass::funkt()



  • 1. da steht irgendwo ein #endif ohne #if...
    2. du musst elementzeiger benutzen. da musst du aber leider die funktion verändern, sonst geht das nicht.



  • ja if....

    steht ganz oben hab ich leider net reingeschrieben....das ist auch net das problem...

    hm geht des sonst echt net mist 😞

    aber danke mal was sind denn elementzeiger??

    danke mal



  • in diesem fall könntest du sicher auf zeiger verzichten.
    Die syntaxhervorhebung im forum zu benutzen ist vielleicht auch etwas hilfreich.



  • Ja sorry syntax hervorhebung hab ich vergessen...
    auf Zeiger verzichten geht leider hab das Problem ja schon auf dieses einfache Beispielprogramm reproduziert......

    danke euch dennoch oli



  • auf zeiger verzichten geht leider net meinte ich



  • aber du musst die c-funktion umbauen oder eine andere funktion nehmen! da c ja kein oop kennt kannst du demnach auch keine member-pointer benutzen...



  • www.function-pointer.org

    Damit man seinen Geist erweckt,
    die Loesung in nem Raestel steckt,
    schaust du in diese Seite rein,
    wird dein Programm bald fertig sein.

    Tip: & hilft


Anmelden zum Antworten