Frage zu Function Pointer



  • Hallo allerseits,
    ich habe gerade ein Problem mit Visual Studio 2005 bzw. meinem Quelltext 🙂
    Ich habe eine Klasse, der im Konstrukor eine Funktion übergeben wird,die die Klasse dann aufruft. Falls dortnull übergeben wird, soll eine Funktion dieser Klasse aufgerufen werden. Das klappt jedoch nicht. Hier ist mein Quelltext, kann mir jemand helfen?

    Header

    class Test
    {
    
    public:
    	Test(void (*funct)(SOCKET *sock, char* buffer));
    	void (*recvfunction)(SOCKET *sock, char* buffer);
            void readMessage(SOCKET *sock, char* buffer);
    

    Cpp-File

    Test::Test(void (*funct)(SOCKET *sock, char* buffer)) : recvfunction(funct)
    {
           if(funkt==NULL)
           {
                   recvfunction = &Test::readMessage;   // Das geht hier nicht
           }
    }
    

    Kann mir bitte jemand helfen und mir erklären,warum das so nicht geht und wie ich es richtig mache?



  • versuch mal das:

    recvfunction = Test::readMessage;



  • und

    void readMessage(SOCKET *sock, char* buffer);

    als static deklarieren



  • Hm, geht trotzdem nicht.



  • Du kannst einem Funktionszeiger keine Methode übergeben, weil dafür der Bezug zum this-Zeiger fehlt. Das geht nur mit "normalen" Funktionen oder static Methoden.

    PS: Außerdem wäre es hilfreich, eine genauere Fehlerbeschreibung als "geht nicht" mitzugeben 😉



  • Das bedeutet, wenn ich den Header so ändere, dass er wie folgt aussieht, müsste es funktionieren?

    class Test
    {
    
    public:
        Test(void (*funct)(SOCKET *sock, char* buffer));
        void (*recvfunction)(SOCKET *sock, char* buffer);
        static void readMessage(SOCKET *sock, char* buffer);
    

    Oder habe ich dich da jetzt falsch verstanden?



  • Ja, so müsste es passen.


Anmelden zum Antworten