IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Affectation entre std::string


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 40
    Points
    40
    Par défaut Affectation entre std::string
    Bonjour,

    Voila j'ai un problème que je n'explique pas:

    J'ai un opérateur d'affectation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    C_FMDatum& C_FMDatum::operator=(const C_FMDatum& c)
    {
    	if(this!=&c)
    	{
    		dX = c.dX;
    		dY = c.dY;
    		dZ = c.dZ;
    		RX = c.RX;
    		RY = c.RY;
    		RZ = c.dZ;
    		dS = c.dS;
    		m_DatumCountry = c.m_DatumCountry;
    		m_DatumName = c.m_DatumName;
    		m_RefEll = c.m_RefEll;
    		m_use_transformation = c.m_use_transformation;
    	}
    	return *this;
    }
    et lorsque je passe dans celui-ci, au moment de l'affectation des std::string( m_DatumCountry et m_Datum_Name ), parfois cela ne recopie pas correctement, c'est à dire que par exemple m_DatumCountry ne prendra pas la valeur de c.m_DatumCountry.

    Ce qui est étrange c'est que les premiers passages dans la fonction se passent très bien mais à un moment les recopies commencent à bugguer.

    Merci d'avance pour votre aide!

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Si aucun de tes membres ne nécessite un traitement particulier (par exemple pointeur) alors ca ne sert à rien d'écrire un constructeur de copie, il faut mieux laisser le compilateur gérer cela.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Bon j'ai laissé celui du compilo comme conseillé mais le problème persiste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C_FMDatum C_FMDatumTable::GetDatum ( unsigned int index ){
     
    	if ( index < m_DatumList.size() ){
     
    		return ( m_DatumList[ index ] );
    	}
    	else
     
    		throw int ( 2 );
    }
    Quand j'appelle ma fonction GetDatum( index ) par exemple, certaines fois, les paramètres std::string comme m_DatumName ne sont pas valides

    Mon appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_OldDatum = m_DatumTable.GetDatum( m_GeoDatumSelOld );
    Dans g_OldDatum n'a pas tous les paramètres correct alors que dans la fonction GetDatum, quand je vérifie la valeur de mDatumList[index], ces paramètres sont bien corrects.

    Je comprends pas là.

  4. #4
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    j'ai une question : quelle méthode utilise-tu pour "visualiser tes variables ? sous quel environnement ? et en quel mode ?

    J'avais déjà vu un bug de ce genre chez un ami qui regardait ses variables via le débugger de visual studio mais pour une compilation en mode release.. ça peut peut-être aussi le faire en débug, je sais pas.

    Sinon, les erreur de copies sont-elle aléatoires ou bien semblent-elles suivre une certaines logique...


    Bonne chance
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

Discussions similaires

  1. différence entre wxString et std::string
    Par noctua dans le forum C++
    Réponses: 5
    Dernier message: 17/11/2009, 09h20
  2. Différence entre un String et un string ?
    Par pepito62 dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/03/2005, 15h11
  3. Affectation entre qrexpr et qrlabel
    Par souad26 dans le forum QuickReport
    Réponses: 2
    Dernier message: 30/01/2005, 11h25
  4. std::string, operator =
    Par tut dans le forum SL & STL
    Réponses: 10
    Dernier message: 05/11/2004, 12h07
  5. [.NET VC++] ou exclusif entre deux String
    Par benoitB dans le forum MFC
    Réponses: 7
    Dernier message: 25/11/2003, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo