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++/CLI Discussion :

Probl�me de r�f�rence


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 47
    Par d�faut Probl�me de r�f�rence
    Bonjour,
    Voil� je commence depuis peu � d�velopper en C++ .net (mais depuis 2 ans en C++) et voil� j'ai un petit souci.
    Je d�veloppe un convertisseur de carnet d'adresse MAC vers carnet d'adresse PC(pour ceux que �a int�resse). Je scrute mon fichier VCF qui contient tous mes contact. Je cr�� un objet "personne" qui va contenir les donn�es de la personne en cours. A la fin des donn�es concernant cette personne, j'ajoute l'objet "personne" dans une liste soit list->Add(personne) (aussi simplement qu'en java d'ailleurs).
    A chaque nouvelle personne, je r�utilise mon objet personne que j'ai cr�� pr�c�demment tout en le r�initialisant � chaque personne rencontr�e (je ne d�salloue pas afin de faire du recyclage d'objet).
    Le souci est que lorsque j'affiche l'ensemble des contacts m�moris�s (ici j'en ai 66), les 66contacts ont le m�me nom.

    J'ai l'impression que le list->add(objet) ne fait que passer l'adresse et ne copie pas l'objet personne.
    Que dois je faire un constructeur de copie ? (�a me pose quelques soucis en .net)...
    Merci de m'�claircir

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    Citation Envoy� par babozfr
    Bonjour,
    Voil� je commence depuis peu � d�velopper en C++ .net (mais depuis 2 ans en C++) et voil� j'ai un petit souci.
    Je d�veloppe un convertisseur de carnet d'adresse MAC vers carnet d'adresse PC(pour ceux que �a int�resse). Je scrute mon fichier VCF qui contient tous mes contact. Je cr�� un objet "personne" qui va contenir les donn�es de la personne en cours. A la fin des donn�es concernant cette personne, j'ajoute l'objet "personne" dans une liste soit list->Add(personne) (aussi simplement qu'en java d'ailleurs).
    A chaque nouvelle personne, je r�utilise mon objet personne que j'ai cr�� pr�c�demment tout en le r�initialisant � chaque personne rencontr�e (je ne d�salloue pas afin de faire du recyclage d'objet).
    Le souci est que lorsque j'affiche l'ensemble des contacts m�moris�s (ici j'en ai 66), les 66contacts ont le m�me nom.

    J'ai l'impression que le list->add(objet) ne fait que passer l'adresse et ne copie pas l'objet personne.
    Que dois je faire un constructeur de copie ? (�a me pose quelques soucis en .net)...
    Merci de m'�claircir
    montre nous ton code

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 47
    Par d�faut
    Il est sale

    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
    19
    20
    21
    CReadVcf::CReadVcf(TextReader ^ stream){
        String ^ line;
        int count = 0;
        bool readable = 0;
        this->fileStream = stream;
        personne = gcnew CObjetVcf();
        array<String ^, 1> ^ adr = gcnew array<String ^>(3);
        contacts = gcnew System::Collections::Generic::List<CObjetVcf^>();
     
        while(line = stream->ReadLine()){        
            if(line->StartsWith("BEGIN:VCARD")){
                //on saute la version
                stream->ReadLine();
                readable = 0;
            }
            if(line->StartsWith("END:VCARD")){
                readable = 0;
                count++;
                contacts->Add(personne);
                personne->Re set();            
            }


    Objet personne :

    .h
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #pragma once
    using namespace System;
    using namespace System::Windows::Forms;
     
     
    ref class CObjetVcf{
     
    private: 
        String ^ nom, ^ prenom, ^mailWork, ^mailHome;
        array<String^>^adresseWork,^adresseHome;
        int age;
        String^ telFixe,^telMobile,^telTravail;
     
    public :
        CObjetVcf(); //constructeur
        CObjetVcf CObjetVcf(const CObjetVcf ^o); //constructeur de copie
        String^ getTelFixe();
        String^ getTelMobile();
        String^ getTelTravail();
        int getAge();
        String^ getNom();
        String^ getPrenom();
        array<String^>^ getAdresseWork();
     
        void setNom(String ^);
        void setPrenom(String ^);
        void setAdresseWork(array<String^>^);
        void setAdresseHome(array<String^>^);
        void setMailWork(String ^);
        void setMailHome(String ^);
     
        void convertToLdiff();
        String^ Show();
        void Reset();
    };
    .cpp
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #include "stdafx.h"
    #include "CObjetVcf.h"
     
    CObjetVcf::CObjetVcf(){
        Reset();
    }
     
    CObjetVcf CObjetVcf::CObjetVcf(const CObjetVcf ^o){
        this->nom = o->nom;
        this->prenome
            //String ^ nom, ^ prenom, ^mailWork, ^mailHome;
        //array<String^>^adresseWork,^adresseHome;
        //int age;
        //String^ telFixe,^telMobile,^telTravail;
    }
     
    void CObjetVcf::Reset(){
        nom = "";
        prenom = "";
        telFixe = "";
        telMobile = "";
        telTravail = "";
        age = 0;
    }
     
    String^ CObjetVcf::getTelFixe(){ return this->telFixe;}
    String^ CObjetVcf::getTelMobile(){ return this->telMobile;}
    String^ CObjetVcf::getTelTravail(){ return this->telTravail;}
    int CObjetVcf::getAge(){ return this->age;}
    String^ CObjetVcf::getNom(){ return this->nom; }
    String^ CObjetVcf::getPrenom(){ return this->prenom;}
    array<String^>^ CObjetVcf::getAdresseWork(){ return this->adresseWork;}
    void CObjetVcf::setNom(String ^ name){ this->nom = name;}
    void CObjetVcf::setPrenom(String ^ surname){ this->prenom = surname;}
    void CObjetVcf::setAdresseWork(array<String^>^adr){ this->adresseWork = adr;}
    void CObjetVcf::setAdresseHome(array<String^>^adr){ this->adresseHome = adr;}
    void CObjetVcf::setMailWork(String^ mail){this->mailWork=mail;}
    void CObjetVcf::setMailHome(String^ mail){this->mailHome=mail;}
     
    void CObjetVcf::convertToLdiff()
    {
     
    }
     
    String^ CObjetVcf::Show(){
        String^contenu="";
        contenu = "Nom : "+this->nom+"\nPrénom : "+this->prenom+"\nAdresse Travail : "+this->adresseWork[0]+"\n"+this->adresseWork[1]+" "+this->adresseWork[2]+"\nMail : "+this->mailWork+"\n --------\n";
        return contenu;
    }
    Merrciiiii

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    j'ai pas trop cherch� plus loin, mais dans ta boucle, tu utilises toujours le meme objet personne
    tu devrais en recr�er un � chaque it�ration et le remplir de valeur

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 47
    Par d�faut
    justement je fais expr�s d'utiliser le m�me objet car �a �vite d'allouer / d�sallouer la m�moire, ce qui prend plus de temps...
    on nous a appris � "recycler les objets" il parait que �a optimise les prog.
    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 47
    Par d�faut
    je viens d'essayer la m�me chose en allouant et d�sallouant l'objet � chaque boucle. Le programme se lance mais une erreur est lanc�e. Je confirme ce que je pense, la liste ne copie pas mon objet mais pointe dessus ce qui est g�nant lorsque je delete l'objet et que j'affiche le contenu de ma liste.
    Avec vous une solution ? Je suis bloqu�...
    Si j'utilise la STL �a marcherait mieux ? J'ai des doutes sur l'outil list de .net... je n'ai jamais rencontr� ce probl�me en utilisant les STL.
    Merci

  7. #7
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    il faut que tu alloues un nouvel objet � chaque fois

    tu dois avoir un probl�me dans ton code

    et ne t'inquietes pas pour la m�moire, le GC s'en occupe

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 47
    Par d�faut
    J'ai trouv� la solution � ma r�ponse. C'�tait bien un probl�me de r�f�rence.
    Il faut donc "cloner" mon objet (je pense que �a correspond � faire une copie) avant de l'ajouter � la liste.
    Donc pas besoin de recr�er un objet � chaque boucle de ce fait.

    voil� le code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Object^ Clone(){return this->MemberwiseClone();};
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    System::Collections::Generic::List<Object^> contacts = gcnew System::Collections::Generic::List<Object^>();
     
    contacts->Add(personne->Clone());
    Bonne soir�e

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VBA-E] Probl�me de r�f�rences
    Par Elstak dans le forum Macros et VBA Excel
    R�ponses: 13
    Dernier message: 13/07/2006, 09h04
  2. Probl�me de r�f�rence de classe
    Par nmathon dans le forum Delphi
    R�ponses: 7
    Dernier message: 21/06/2006, 16h46
  3. [FLASH MX2004] this et probl�me de r�f�rence
    Par cristolb dans le forum ActionScript 1 & ActionScript 2
    R�ponses: 5
    Dernier message: 03/05/2006, 22h33
  4. Probl�me de r�f�rence de donn�es circulaire
    Par Wismerhill50 dans le forum Langage
    R�ponses: 3
    Dernier message: 23/10/2005, 22h38
  5. R�ponses: 1
    Dernier message: 10/08/2004, 10h39

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