Pb conversion CString string pour affichage ds combobox

Signaler
Messages postés
8
Date d'inscription
samedi 14 avril 2007
Statut
Membre
Dernière intervention
30 mai 2007
-
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
-
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

Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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
Messages postés
8
Date d'inscription
samedi 14 avril 2007
Statut
Membre
Dernière intervention
30 mai 2007

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>
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
quand tu fais clic droit sur le type string, atteindre la définition t'as quoi comme définition ?

Loki
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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
Messages postés
8
Date d'inscription
samedi 14 avril 2007
Statut
Membre
Dernière intervention
30 mai 2007

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>
Messages postés
8
Date d'inscription
samedi 14 avril 2007
Statut
Membre
Dernière intervention
30 mai 2007

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>
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
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