Problème avec string

visualstar Messages postés 18 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 17 février 2005 - 3 déc. 2004 à 20:10
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 4 déc. 2004 à 13:49
Bonjour,

J'ai un problème en C++ avec les string.
Comment peut-on faire pour passer un string à une fonction. Dans cette fonction, je fais un cin ; mais ça marche pas, ça modifie rien dans le main. SImple illustration :

#include
#include <string>
using namespace std;

void init(string);
void init(string Nom){
cout <<"Nom : ";
cin >>Nom;
}
int main(void){
string Nom_User;

init(Nom_User);
cout << Nom_User;
system("pause");

return 0;
}

Résultats :

Nom : moi
Appuyez sur une touche pour continuer...

Comme vous voyez, il ne m'affiche pas ma chaîne avec le cout du main !!

Quelqu'un peut m'éclairer ?

7 réponses

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
3 déc. 2004 à 20:32
salut,

renseigne toi sur le passage par valeur / vs passage par reference.
pour simplifier :
void foo(string); // une copie du string est passé à foo. L'original sera donc intacte.
void foo(string&); //une rérérence vers le string est passé à foo. L'original peut etre modifié.

existe aussi (entre autres) void foo(const string&); // une rérérence vers le string est passé à foo. //L'original ne peut pas etre modifié.
0
visualstar Messages postés 18 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 17 février 2005
3 déc. 2004 à 23:06
Yop, merci.

Je comprends pas comment j'y ai pas pensé ! Je devais etre fatigué lol !
0
visualstar Messages postés 18 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 17 février 2005
3 déc. 2004 à 23:34
En fait, maintenant que j'intègre ça dans mon prgramme qui est plus grand et qui utilise des classes, il me mets plein d'erreur du genre :
Voilà ce que j'ai dans un header :
#include <string>

#define NB 50

class client{
protected:
string Nom_Client, Prenom_Client;

public:
client(string&, string&); //Constructeur
client(const client &); //Constructeur de copie
virtual ~client(); //Destructeur

virtual void affiche_client();
string lire_nom();
string lire_prenom();
};

Et les erreurs du style :
error C2146: syntax error : missing ';' before identifier 'Nom_Client'
error C2501: 'client::string' : missing storage-class or type specifiers
error C2501: 'client::Nom_Client' : missing storage-class or type specifiers
error C2501: 'client::Prenom_Client' : missing storage-class or type specifiers
>en montrant la déclaration des données membres de type string !!!

error C2143: syntax error : missing ')' before '&'
error C2143: syntax error : missing ';' before '&'
error C2460: 'client::string' : uses 'client', which is being defined

Tout ce genre d'erreur dans tout mes fichiers !!!
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
4 déc. 2004 à 01:38
using std::string; ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
visualstar Messages postés 18 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 17 février 2005
4 déc. 2004 à 12:52
En effet, ça résout les principales erreurs, merci.

Mais il y en a encore 33 et ça concerne mes surcharges de l'opérateur <<. Il me reconnaît pas le mot friend, ostream ... il me dit que j'ai oublié des ;
0
visualstar Messages postés 18 Date d'inscription lundi 18 février 2002 Statut Membre Dernière intervention 17 février 2005
4 déc. 2004 à 12:57
Ha non j'ai rien dit ... j'avais oublié de mettre "using std::string;" dans une de mes pages

Ha oui aussi, j'aurais besoin d'une explication :

J'ai mon constructeur de copie :

client_entreprise(const client_entreprise&);

client_entreprise::client_entreprise(const client_entreprise& src):client(src.Nom_Client, src.Prenom_Client){

}

Le problème, c'est que si je laisse le const, ça ne fonctionne pas :
cannot convert parameter 1 from 'const std::string' to 'std::string &'

Et si je retire le const, ça compile... Pourquoi ?
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
4 déc. 2004 à 13:49
ton constructeur de copie garantit que l'objet "copié" est non modifiable. le constructeur de client ne garantit pas que ses 2 parametres soit non modifiable, or celui-ci est appelé par le constructeur de copie de client_entreprise ...
Le compilateur refuse a juste titre !

solution :
client(const string&, const string&); //Constructeur
0
Rejoignez-nous