Type string dans Visual C++

Résolu
fadoch Messages postés 12 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 23 juin 2010 - 21 juin 2010 à 16:51
aslibaub Messages postés 1 Date d'inscription jeudi 20 janvier 2011 Statut Membre Dernière intervention 20 janvier 2011 - 20 janv. 2011 à 11:23
Bonjour à tous,
je travaille avec Visual C++.
je souhaite savoir quelle est la différence entre le type "string" et le type "CString". et pourquoi

MessageBox(message);

ne fonctionne pas si "message" est de type "string"?
et

std::getline(fichier, message);

ne fonctionne pas avec le type "CString"?

et comment je fait pour exécuter ces deux commandes sur la même chaine de caractère?


std::getline(fichier, message);
MessageBox(message);

je vous remercie d'avance.

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 juin 2010 à 18:44
Cstring est une classe MFC, ce qui signifie qu'elle ne fonctionne qu'avec windows

std::string est la classe c++ standard qui fonctionne toujours, c'est celle que je te conseille d'utiliser

std::getline(fichier, message); ne peut pas fonctionner avec un type CString, le type n'est pas reconnu.

Pour t'en sortir, tu peux convertir CString en string et inversement
//CString -> std::string
CString cs("Hello");
std::string s((LPCTSTR)cs);
//std::string -> CString
std::string s("Hello");
CString cs(s.c_str());


Mais bon, il vaut quand même mieux choisir un type et utiliser les fonctions qui vont avec.
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
22 juin 2010 à 09:11
Bonjour,
effectivement ce manque de compatibilité est gênant. Ppour ma part j'ai opté pour CString et j'utilise la fonction GetBuffer afin d'obtenir un car* et ReleaseBuffer. En mixant les types j'ai eu des problèmes. Le conseil donné précedament est le bon: choisir un type et s'y tenir.
Pour getline j'utilise le Getbuffer auparavant
Bon codage

louis
0
fadoch Messages postés 12 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 23 juin 2010
22 juin 2010 à 09:55
merci beaucoup pour ces réponses. j'ai utilisé les conversions si-dessus et ça marche trés bien.
0
aslibaub Messages postés 1 Date d'inscription jeudi 20 janvier 2011 Statut Membre Dernière intervention 20 janvier 2011
20 janv. 2011 à 11:23
Bonjour,
J'essaye d'utiliser Markup pour avoir un accès aux fichiers xml. Donc je suis obligée de passer par Cstring. Je travaille sur Visual Studio 2008.
Pour déjà comprendre comment ça marche, j'essaye de créer une variable CString avec un string simple et de l'écrire dans un fichier.
Voici mon code :
CString strSN;
strSN.Format(TEXT("%s"),"asli");
std::string s((LPCTSTR)strSN);
// écriture de s dans le fichier m_ofsStream
m_ofsStream << s << endl;

J'ai le message d'erreur suivant :
.\src\Log.cpp(49) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::allocator<_Ty> &)' : impossible de convertir le paramètre 1 de 'LPCTSTR' en 'const std::allocator<_Ty> &'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>,
1> _Ty=char
1> ]
1> and
1> [
1> _Ty=char
1> ]
1> Raison : impossible de convertir de 'LPCTSTR' en 'const std::allocator<_Ty>'
1> with
1> [
1> _Ty=char
1> ]
1> Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
1>.\src\Log.cpp(50) : error C2679: '<<' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::string' (ou il n'existe pas de conversion acceptable)
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(653): peut être 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(700): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(738): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(785): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(909): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(916): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(923): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(930): ou 'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afx.h(1302): ou 'CArchive &operator <<(CArchive &,ATL::CTimeSpan)'
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afx.h(1309): ou 'CArchive &operator <<(CArchive &,ATL::CTime)'
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afx.h(1519): ou 'CArchive &operator <<(CArchive &,const CObject *)'
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(170): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(176): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(183): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(190): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(210): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(243): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(263): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(288): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(308): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(328): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(349): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(369): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(390): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(410): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(430): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(450): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream(470): ou 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> lors de la tentative de mise en correspondance de la liste des arguments '(std::ofstream, std::string)'




Je n'arrive pas à m'en sortir depuis 2 jours, alors si quelqu'un peut m'aider, je serai ravie.
Merci.
0
Rejoignez-nous