Type string dans Visual C++ [Résolu]

Signaler
Messages postés
12
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
23 juin 2010
-
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
-
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

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
312
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.
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
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
Messages postés
12
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
23 juin 2010

merci beaucoup pour ces réponses. j'ai utilisé les conversions si-dessus et ça marche trés bien.
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011

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.