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

Signaler
Messages postés
20
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
21 janvier 2011
-
Messages postés
20
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
21 janvier 2011
-
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

Messages postés
20
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
21 janvier 2011

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");
}
Messages postés
157
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
27 août 2010
4
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.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
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]
Messages postés
157
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
27 août 2010
4
Ah effectivement, je ne savais pas qu'on pouvait prendre ce raccourcis !
Merci !
Messages postés
20
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
21 janvier 2011

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 ?
Messages postés
20
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
21 janvier 2011

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 ... ^^