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

MFC Discussion :

Copy constructor ?


Sujet :

MFC

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2
    Par d�faut Copy constructor ?
    Bonjour,

    J'ai besoin pour mon programme de stocker une liste de points. Pour cela, j'utilise CList et CPoint comme suit :

    typedef CList<CPoint,CPoint> Listepoints;

    J'utilise ce type dans une classe pour une des variables membres. Seulement quand je cr�e une fonction qui permet de retourner une variable de type ListePoints, j'ai une erreur � la compilation : No copy constructor available.

    Voil� la fonction en question :
    Listepoints m_MaListe;
    .....
    .....

    Listepoints CMyClass::GetMaListe()
    {
    return m_MaListe;
    }

    J'ai cherch� dans l'aide de Visual C++ mais en vain, je ne m'en sors pas. Pourriez-vous m'aider ?

  2. #2
    Membre chevronn�
    Avatar de bigquick
    Profil pro
    Inscrit en
    Ao�t 2002
    Messages
    356
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 356
    Par d�faut
    Alors, si je ne me trompe pas ...

    avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Listepoints CMyClass::GetMaListe() 
    { 
    return m_MaListe; 
    }
    tu comptes retourner une liste de points .... pas juste un pointeur... donc le compilateur doit savoir comment copier ta liste de points (m_MaListe) pour pouvoir en faire une copie et la retourner.
    Il faudrait donc (je pense) creer une classe pour la liste de points, et red�finir dedans l'op�rateur de copie (=), afin qu'il sache comment s'y prendre.

    Mais est-ce que c'est bien ce que tu veux faire (retourner une copie � chaque fois), sachant que si c'est juste pour y acc�der c'est bien long...
    Un pointeur ou une r�f�rence suffirait:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Listepoints* CMyClass::GetMaListe() 
    { 
    return &m_MaListe; 
    }
    ou

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Listepoints& CMyClass::GetMaListe() 
    { 
    return m_MaListe; 
    }

    Voil� voil� ... mais attention dans ces cas l� � ne pas modifier la liste dans la fonction qui la r�cup�re ( *GetMaListe() pour le pointeur ou GetMaListe() pour la r�f�rence)... sinon l'original (m_MaListe) sera modifi� aussi.

    Bah euh dis moi si �a marche

    A+


    bigquick

  3. #3
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pour pas que l'appelant modifie ce qui est retourn� (genre une donn�e priv�e), il y le sp�cifieur const qui permet justement d'emp�cher cela. Retourner un pointeur n'est pas toujours une bonne id�e, cela peut laisser croire qu'il faille appeller delete dessus.
    =>
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    const Listepoints & CMyClass::GetMyList() const
    { 
        return m_MyList; 
    }


    Parenth�se, std::list (qui fait parti du C++ contrairement � CList) d�fini bien un constructeur de recopie. Par contre, il va y avoir une recopie de tous les chainons (contrairement � des solutions plus complexes essayant de mettre en oeuvre des move semantics -- je ne sais plus si VC++ supporte mojo).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2
    Par d�faut
    Merci pour ces r�ponses !

    Apr�s r�flexion je me suis rendu compte que retourner un pointeur de la liste convenait plus avec ce que je voulais faire. Donc merci de m'avoir �clair� sur le sujet !

    Et au passage je n'ai plus de message d'erreur !

    @+

  5. #5
    tut
    tut est d�connect�
    Membre �clair�
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par d�faut
    et au passage, la classe CList est un peu une m*$*%� compar�e � celle de la librairie standard C++ fournit par Visual 6.0, d'ailleurs. Si tu as des probl�mes de performance sur l'ajout/suppression d'�l�ments, essayes d'utiliser std::list � la place de CList.
    Perso, �a a �t� le jour et la nuit en ce qui me concerne, chiffres (que je n'ai plus) � l'appuis.
    Evidemment, c'�tait dans un contexte et pour des besoins particuliers, mais il y avait un facteur 100 sur le temps d'ajout d'�l�ment entre CList et std::list, temps qui augmentait pour CList et qui restait constant pour std::list.
    A bon entendeur...

Discussions similaires

  1. probleme avec copy constructor
    Par alamata dans le forum C++
    R�ponses: 15
    Dernier message: 06/11/2014, 08h34
  2. vector et copy constructor
    Par r0d dans le forum Langage
    R�ponses: 5
    Dernier message: 27/12/2012, 19h49
  3. SWAP IDIOM COPY CONSTRUCTOR
    Par guillaume07 dans le forum C++
    R�ponses: 32
    Dernier message: 01/06/2010, 07h49
  4. copy constructor/ assignement/ destructor
    Par lafrankette dans le forum D�buter
    R�ponses: 5
    Dernier message: 24/08/2009, 18h09
  5. [debutant]probleme avec le copy constructor
    Par Battosaiii dans le forum D�buter
    R�ponses: 10
    Dernier message: 09/11/2005, 10h33

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