Pb conversion CString string pour affichage ds combobox

phenix6942 Messages postés 8 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 30 mai 2007 - 30 mai 2007 à 16:29
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 - 30 mai 2007 à 17:52
bonjour à tous
je realise un projet mfc dans lequel j utilise plusieurs boites de dialogue.
dans une de ces boites je souhaite afficher des string dans une combobox.
pour cela je dois convertir des string en Cstring et inversement.
mon probleme est le suivant :

lors de la conversion Cstring en string,
<dir>CString szNomPrenom;
string NomPrenom(szNomPrenom);

apres compilation, le message d erreur suivant apparait: 

c:\documents and settings\hp_propriétaire\bureau\itracking3\itracking\dialprofil.cpp(112) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)' : impossible de convertir le paramètre 1 de 'CString' en 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it'

<dir>with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé

------------------------------------------------------------------------------------------

que dois je faire pour eliminer cette erreur?
ps: je travaille sous Visual 2005 et j ai inclus les fichiers suivants:

<dir>#include "stdafx.h"
#include "ITracking.h"
#include "DialProfil.h"
#include <string>
#include <cstring>
#include
#include <stdlib.h>
#include "atlbase.h"
#include "atlstr.h"
#include "comutil.h"

merci beaucoup par avance.

</dir></dir></dir>

7 réponses

Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
30 mai 2007 à 17:09
salut,

pour convertir de string à CString : CString MyCString(Mystring);                   // avec Mystring de type string.
pour convertir de CString à string : string Mystring = MyCString.GetBuffer();   // avec MyCString de type CString.

je crois que c'est ça essaie. si d'autres veulent corriger...

Loki
0
phenix6942 Messages postés 8 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 17:21
tout d abord merci d avoir repondu.

j ai modifié mon code:


<dir>



CString szNomPrenom;
string NomPrenom = szNomPrenom.GetBuffer();



j ai encore une erreur:

c:\documents and settings\hp_propriétaire\bureau\itracking3\itracking\dialprofil.cpp(116) : error C2440: 'initialisation' : impossible de convertir de 'wchar_t *' en 'std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë





</dir>
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
30 mai 2007 à 17:32
quand tu fais clic droit sur le type string, atteindre la définition t'as quoi comme définition ?

Loki
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
30 mai 2007 à 17:36
dans les propriétés de ton projet, onglets  propriétés de configuration | C/C++ | Langage tu as une ligne :

Traitement de wchar_t en tant que type intégré       OUI/NON   Si c'est à oui mets NON et recompile pour voir

Loki
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phenix6942 Messages postés 8 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 17:37
j ai deux definitions :

<dir>typedef basic_string<char, char_traits<char>, allocator<char> >
string;
typedef basic_string<wchar_t, char_traits<wchar_t>,
allocator<wchar_t> > wstring;

</dir>
0
phenix6942 Messages postés 8 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 17:45
j'ai fais le changement dans les propriétés.
j'ai encore une erreur :

<dir>c:\documents and settings\hp_propriétaire\bureau\itracking3\itracking\dialprofil.cpp(117) : error C2440: 'initialisation' : impossible de convertir de 'unsigned short *' en 'std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë

</dir>
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
30 mai 2007 à 17:52
roooooh, essaie d'utiliser la fonction WideCharToMultiByte cf. MSDN pour transformer la chaine issue de GetBuffer de wchar en char car apparemment le problème est là.
annule également la manip dans les propriétés, pour revenir à l'erreur précédente.
sinon si ça ne te dérange pas outre mesure, tu peux aussi travailler en unicode, en créant un wstring au lieu d'un string comme ceci :

CString szNomPrenom;
wstring NomPrenom = szNomPrenom.GetBuffer();

Loki
0
Rejoignez-nous