Probleme mit libcurl CURLOPT_WRITEFUNCTION



  • Guten Abend die Herren,

    ich schreibe grade eine Wrapperklasse für libcurl um .json Datein runterladen zu können. Folgendes Problem:

    size_t libcurlWrapper::write_data(void *ptr, size_t size, size_t nmemb, FILE *stream){
        size_t written = fwrite(ptr, size, nmemb, stream);
        return written;
    }
    
    bool libcurlWrapper::performRequest(char* outfilename){
        if(m_curl){
            m_fp = fopen(outfilename, "wb");
            curl_easy_setopt(m_curl, CURLOPT_URL, m_url);
            curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, write_data);
            curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, m_fp);
            m_res = curl_easy_perform(m_curl);
            curl_easy_cleanup(m_curl);
            fclose(m_fp);
            return true;
        }else{
            return false;
        }
    }
    
    libcurlwrapper.cpp:-1: In member function 'bool libcurlWrapper::performRequest(char*)':
    libcurlwrapper.cpp:24: Fehler: invalid use of member function (did you forget the '()' ?)
             curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, write_data);
             ^
    

    Ich habe diverse Beispiele im Internet gefunden die genau so wie in meinem Codebeispiel vorgehen. Verstehe nicht was hier schief läuft.
    Ich hoffe ihr könnt mir da weiter helfen.

    Mfg



  • Das riecht irgendwie nach einem Fehler, dessen eigentliche Ursache durch irgendwelches Makrogeraffel verdeckt wird, wie es in C-Bibliotheken leider oft anzutreffen ist.
    Ohne jetzt die genaue Ursache bestimmen zu können, würde ich dir auf jeden Fall raten erstmal sicherzustellen, dass der Compiler weiss, dass du einen C-Header einbindest:

    extern "C" {
       #include <curl.h>
    }
    

    ... und es dann nochmal versuchen. Möglicherweise hilft das schon.

    Gruss,
    Finnegan



  • Ich denke, die Meldung bezieht sich auf write_data. Adressen von Memberfunktionen erhält man nur mit & vor dem Funktionsnamen.

    Ist die Funktion static? Sonst kommt die nächste Meldung.



  • Es hat geholfen die Funktion static zu machen! Finnegan dein Ansatz hat leider nicht zum Erfolg geführt. Trotzdem Danke
    Schönen Abend noch


Anmelden zum Antworten