Bonjour à tous,
pour des raisons qui échappent à ma volonté (malheureusement), je me vois contraint d'implémenter des trucs tordus en ce moment.
Donc, pour expliquer mon souci:
j'ai un main qui ressemble à ceci:
et voici la définition de Connector::sendText():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void macallback(char* message) { cout << message << endl; } int main(char* argv, char** argc) { Connector connector; connector.sendText("toto", macallback); }
Jusqu'ici, tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int Connector::sendText(std::string, void callback(char*));
Maintenant, il se trouve que dans Connector::sendText, je dois appeler une fonction (de libcurl) qui prend elle-même une callback. J'appelerais cette dernière curlCB. Et je voudrais que ma callback à moi, la mienne, soit appelée dans la callback curlCB.
J'ai tenté le code suivant:
Le problème, et bien c'est que ça ne compile pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 struct MyParam { std::string str; void CBack(char*); } void curlCB(void* userParam) { struct MyParam *param= (struct MyParam*) userParam; param->CBack( param.str.c_str() ); } int Connector::sendText(std::string, void callback(char*)) { // je créé le param que je vais passer à la curlCB MyParam param; param.CBack = callback; // <---- pb ici // je configure curl curl_easy_setopt(m_pCurl, CURLOPT_READFUNCTION, curlCB); //je lui passe ma callback curl_easy_setopt(m_pCurl, CURLOPT_READDATA, ¶m); //je passe le paramètre de la callback (curlCB) }
La ligne param.CBack = callback me renvoie l'erreur:
Mais justement, c'est ce que je veux: que ma fonction soit l'opérande gauche. Mais visiblement, je n'en ai pas le droit. Alors comment faire?error C2659: '=' : fonction comme opérande gauche
Partager