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

Messages postés
12
Date d'inscription
jeudi 22 avril 2010
Dernière intervention
23 juin 2010
- - Dernière réponse : aslibaub
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
788
Date d'inscription
mardi 8 juillet 2003
Dernière intervention
8 mars 2017
0
Merci
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
Commenter la réponse de cs_louis14
Messages postés
12
Date d'inscription
jeudi 22 avril 2010
Dernière intervention
23 juin 2010
0
Merci
merci beaucoup pour ces réponses. j'ai utilisé les conversions si-dessus et ça marche trés bien.
Commenter la réponse de fadoch
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Dernière intervention
20 janvier 2011
0
Merci
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.
Commenter la réponse de aslibaub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.