Probleme d'affectaction std::string dans std::string d'une classe

Rockanos Messages postés 20 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011 - 14 avril 2010 à 02:58
Rockanos Messages postés 20 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011 - 16 avril 2010 à 21:32
Bonjour,

j'ai un probleme au niveau de l'affectation d'un std::string dans un autre std::string appartenant a une class.

Exemple:

class listeSport
{
private:
std::string sonNom;

public:
void affecterSonNom(std::string nouv)
{
sonNom = nouv; // <== Probleme
        }
};

int main()
{
        listeSport * sport;
        sport[indice].affecteSonNom(golf);
}


Merci d'avance !

6 réponses

Rockanos Messages postés 20 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011
14 avril 2010 à 03:05
Escusez moi .. j'ai fourni du code rempli d'erreurs

Voici le bon :

#include 
#include <fstream>
#include <string>

class listeSport
{
private:
std::string sonNom;

public:
void affecterSonNom(std::string nouv)
{
sonNom = nouv; // <== Probleme
        }
};

int main()
{
        listeSport * sport;
        sport[0].affecterSonNom("golf");
}
0
deadhand Messages postés 152 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 27 août 2010 3
14 avril 2010 à 09:13
Salut !
Tu ne peux pas faire sport[0].XXX !

Tu dois écrire :
sport->affecterSonNom("golf");


Tu n'as pas défini de tableau mais juste un pointeur. Si tu veux un tableau, réserve l'espace mémoire avec un malloc.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 avril 2010 à 10:17
Ceci devrait fonctionner:
#include 

class listeSport
{
private:
  std::string _sonNom;

public:
  void affecterSonNom(const std::string& nouv)
  {
    _sonNom = nouv;
  }
};

int main()
{
  listeSport sport;
  sport.affecterSonNom("golf");

  return 0;
}


@Rockanos: Ici j'ai utilisé la classe elle même sans passer par des pointeurs. Ton problème de base était que tu avais oublié d'instancier ta classe: listSport* sport = new listeSport;

@deadhand: Il y a quelque subtilité dont tu n'es pas au courant :p. En C et C++, un pointeur est un tableau. Donc sport->XXX équivant à (*sport).XXX qui équivaut à (*(sport + 0)).XXX qui équivaut à sport[0].XXX
C'est moche, mais techniquement valide !

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
deadhand Messages postés 152 Date d'inscription dimanche 15 octobre 2006 Statut Membre Dernière intervention 27 août 2010 3
14 avril 2010 à 10:30
Ah effectivement, je ne savais pas qu'on pouvait prendre ce raccourcis !
Merci !
0

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

Posez votre question
Rockanos Messages postés 20 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011
14 avril 2010 à 19:48
Il y a certaines choses que je ne comprends pas... Ce sont peut-être des bêtes questions mais je ne sais pas aller plus loin si je ne comprends pas ça.

1) A quoi ça sert d'instancier des variables avec pointeur ? (maClasse * uneClasse = new maClasse;)
2) Le système de pointeur pour une classe n'est pas "This" ?
3) Comment marche le système d'affectation qu'il faut utiliser pour cette classe ?
=>
Donc sport->XXX équivant à (*sport).XXX qui équivaut à (*(sport + 0)).XXX qui équivaut à sport[0].XXX


sport[0].XXX devrait fonctionner non ?
0
Rockanos Messages postés 20 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011
16 avril 2010 à 21:32
Merci pour votre aide.

Je me suis renseigné a propos des vecteur, je les ai utilisés et ça a marché correctement.

Le problème venait du fait qu'un pointeur sur un objet n'est pas un tableau dynamique.. et donc j'avais une erreur avec la mémoire..

Je ne sais pas exactement comment faire pour allouer et reallouer la memoire en C++. Mais les vecteurs font ça tout seul ... ^^
0
Rejoignez-nous