Visual c++ strings

[Résolu]
Signaler
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005
-
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005
-
Bon je vous explique mon problème rapidement:

J'ai fais un petit programme en MFC sous visual c++. Je récupère les donnée d'un fichier via une classe que j'ai défini. Parmis ces donnée se trouve un string. J'aimerais afficher le contenu de ce string dans un contrôle en changeant la valeur du Cstring associé à ce controle (m_str_name) puis en appelant UpdateData(FALSE);
Malheureusement le compilo me répond:

D:\C++\Project\Gta_save\Gta_save\Gta_saveDlg.cpp(1314) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no
acceptable conversion)

Voici le bout de code en question:

//Read informations:

Save my_save_file("C:\\....monfichier.txt");


my_save_file.GetName();
my_save_file.GetMoney();

m_str_name = my_save_file.current_name;
m_long_money = my_save_file.current_money;

UpdateData(FALSE);

Au passage j'ai aussi un autre problème sur ce même projet:

Pour l'instant le fichier qui est ouvert avec cette classe est toujours le même. J'ai fais un CFileDialog(...); qui fonctionne très bien. J'aimerais bien stocker la valeure retournée par GetPathName() dans une variable en vu d'une ouverture avec fopen(); mais je ne sais trop quelle type de variable choisir.

Merci de votre aide :)

8 réponses

Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
Ok, pardon, j'avais mal lu...

Du coup, ceci devrait marcher:



m_str_name.Format("%s",my_save_file.current_name.c_str());

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005

J'ai trouvé la réponse à mon problème grâve à la doc en ligne MSDN. Il suffisait enfait de placer le filepath dans un CString :)
Messages postés
15151
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 octobre 2021
99
pour le premier probléme: le code n'est pas suffisant... mais tu as
avoir m_str_name et my_save_file.current_name de types différents.



pour le second: pourquoi pas un char *?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005

ET bien oui, commme je l'ai dis plus haut, m_str_name est un Cstring propre à MFC tandis que my_save_file.current_name est un string.

J'ai essayé avec un char* de cette manière:

if(m_ldFile.DoModal() == IDOK) {

//Get path:
char* m_char_path = m_ldFile.GetPathName();

//...
}

Mais le compilo me répond: cannot convert from 'class CString' to 'char *'
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Essaye comme ca:



const char* m_char_path = m_ldFile.GetPathName().GetString();


Kaid - kaid.fr.st
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005

Ta soluce marche buno. Mais pour le deuxième problème, quand je fais
const char* m_char_path = m_ldFile.GetPathName().GetString(); le compilo me répond:

error C2039: 'GetString' : is not a member of 'CString'
c:\program files\microsoft visual studio\vc98\mfc\include\afx.h(368) : see declaration of 'CString'
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Désolé zouippy, ca fait quelques années que j'ai arrêté les MFC. Tu peux peut-être remplacer GetString() par GetBuffer().

Kaid - kaid.fr.st
Messages postés
14
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
29 juillet 2005

Non toujours pas... Erreur windows de base... :( Merci quand même :)