Invalid conversion from‘const void*&
Résolu/Fermé
A voir également:
- Invalid conversion from‘const void*&
- Win setup from usb - Télécharger - Utilitaires
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Work from home avis - Forum Vos droits sur internet
- Item returned from customs dhgate ✓ - Forum Consommation & Internet
- Monnaie conversion - Télécharger - Banque & Budget
2 réponses
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
5 février 2025
1 526
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.