Invalid conversion from‘const void*&
Résolu/Fermé
A voir également:
- Invalid conversion from‘const void*&
- Win setup from usb - Télécharger - Utilitaires
- Conversion monnaie - Télécharger - Banque & Budget
- Conversion m3 en m - Forum Programmation
- Conversion bytes en mo ✓ - Forum Webmastering
- Attempting boot from usb device - Forum Windows 10
2 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
10 juil. 2008 à 04:51
10 juil. 2008 à 04:51
Salut,
Oui tu ne devrais pas utiliser un string mais plutôt un tableau de char.
Je sais bien qu'on est en C++ et pas en C mais ici tu n'as pas le choix.
En fait c'est simple: la classe string encapsule un char *
Et justement étant donné que l'on parle d'encapsulation, il faut que la classe string, avec sa méthode c_str(), s'assure que la chaine retournée ne sera pas modifiée car tu es sensé utilisé les méthodes de string pour faire ça. Donc il faut que tu aies uniquement un accés en lecture seule à cette chaine. C'est pourquoi la méthode retourne un const char *, qui sera donc converti en const void * à la volée dans le passage à recv. Or recv attend un void *, c'est à dire un buffer qu'il est sûr de pouvoir modifier, ce qui n'est pas le cas ici.
Tu dois donc prendre un tableau de char, alloué dynamiquement ou pas c'est toi qui décide.
Oui tu ne devrais pas utiliser un string mais plutôt un tableau de char.
Je sais bien qu'on est en C++ et pas en C mais ici tu n'as pas le choix.
En fait c'est simple: la classe string encapsule un char *
Et justement étant donné que l'on parle d'encapsulation, il faut que la classe string, avec sa méthode c_str(), s'assure que la chaine retournée ne sera pas modifiée car tu es sensé utilisé les méthodes de string pour faire ça. Donc il faut que tu aies uniquement un accés en lecture seule à cette chaine. C'est pourquoi la méthode retourne un const char *, qui sera donc converti en const void * à la volée dans le passage à recv. Or recv attend un void *, c'est à dire un buffer qu'il est sûr de pouvoir modifier, ce qui n'est pas le cas ici.
Tu dois donc prendre un tableau de char, alloué dynamiquement ou pas c'est toi qui décide.