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

SL & STL C++ Discussion :

Constructeur par copie et std::list


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut Constructeur par copie et std::list
    Salut,

    J'ai une classe comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Point {
    public:
    	Point (float x=0.0, float y=0.0, std::string Nom="");
    	Point (Point &Other);
    ...
    Mon problème c'est que quand j'essaie de l'utiliser à travers une std::list<Point>, le compilo (Visual .net) me sort
    class 'Point' : no copy constructor available or copy constructor is declared 'explicit'

    J'avoues que j'ai un peu de mal à comprendre ce qu'il me raconte

    Quelqu'un pourrait m'aider ?

    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Essaye de prendre une référence constante (const Point &) dans ton constructeur par copie.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    Ben le problème maintenant c'est qu'il me sort
    z:\Collisions\Src\Point.cpp(13): error C2662: 'Point:: x' : cannot convert 'this' pointer from 'const Point' to 'Point &'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Point::Point (const Point &Other)
    {
    	_x = Other.x();
    	_y = Other.y();
    	_Nom = "Copy of" + Other.Nom();
    }
    La j'avoue que j'suis un peu perdu [/code]
    (et c'est pareil pour _y et _Nom)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    essai de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Point::Point (const Point &Other)
    {
      Point toto = Other;
       _x = toto.x();
       _y = toto.y();
       _Nom = "Copy of" + toto.Nom();
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    bon ca y'est en fait fallait que je déclare mes accesseurs en const

    Parce que quand je copie l'objet, celui-ci est const, alors que dans sa déclaration ses accesseurs l'étaient pas

    Merci beaucoup Loulou

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Petite précision au cas où : tu peux accéder aux données privées de Other, puisque c'est aussi un point. Donc pas besoin d'utiliser les accesseurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Point::Point (const Point &Other) :
    _x(Other._x),
    _y(Other._y),
    _Nom("Copy of" + Other._Nom)
    {
     
    }
    Petite remarque : le prefixage par 1 ou 2 underscores est reservé ; autant éviter

    Citation Envoyé par killerjeff
    essai de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Point::Point (const Point &Other)
    {
      Point toto = Other;
       _x = toto.x();
       _y = toto.y();
       _Nom = "Copy of" + toto.Nom();
    }
    Appeler le constructeur par copie dans le constructeur par copie, ça n'est pas forcément une bonne idée
    Et puis de toute façon la méthode en elle-même est de la bidouille ; il vaut effectivement mieux régler proprement les problèmes de const comme notre ami l'a fait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 24
    Dernier message: 08/05/2008, 17h30
  2. Problème constructeur par copie listes chainées
    Par Nicoclem dans le forum C++
    Réponses: 4
    Dernier message: 10/04/2008, 11h44
  3. [Debutant] Problème avec un constructeur par copie
    Par Drannor dans le forum Débuter
    Réponses: 5
    Dernier message: 12/03/2007, 09h15
  4. Réponses: 5
    Dernier message: 03/12/2006, 15h55
  5. [deb.]Constructeur par copie
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2005, 13h33

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