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 :

Operator = pour mon vector<POINT>


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut Operator = pour mon vector<POINT>
    Bonjour,

    Mon problème est le suivant :
    J'ai déclarer une classe CCurve dans lequel j'ai un membre m_PointList étant une liste de points déclarer comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class CCurve :: CElement
    {
     
    protected:
    vector<POINT> m_PointList;  // Type safe point list
     
    public:
       virtual void Draw(HDC hdc, const CElement* pElement = 0) const;
     
    ...
    }
    dans la fonction Draw de CCurve, je souhaite parcours les elements de ma list ou de mon vector à l'aide d'un iterator Si je met ce code dans mon fonction Draw, ça compile sans probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    vector<POINT> the_vector;
    vector<POINT>::iterator the_iterator;
     
    POINT xy;
    xy.x=0;
    xy.y=1;
    for( int i=0; i < 10; i++ ) the_vector.push_back(xy);
    the_iterator = the_vector.begin();
    while( the_iterator != the_vector.end() ) 
          ++the_iterator;
    par contre ça, si je fais appel à vector ou ma list membre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    vector<POINT>::iterator aPoz;
    aPoz = this->m_PointList.begin();
    mais en compilant, voila ce que le compilateur me sort :
    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
    1>c:\users\administrator\desktop\developpement\cpp\exemple\elements.cpp(243) : error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::_Vector_const_iterator<_Ty,_Alloc>' (ou il n'existe pas de conversion acceptable)
    1>        with
    1>        [
    1>            _Ty=POINT,
    1>            _Alloc=std::allocator<POINT>
    1>        ]
    1>        c:\program files\microsoft visual studio 9.0\vc\include\vector(405): peut être 'std::_Vector_iterator<_Ty,_Alloc> &std::_Vector_iterator<_Ty,_Alloc>::operator =(const std::_Vector_iterator<_Ty,_Alloc> &)'
    1>        with
    1>        [
    1>            _Ty=POINT,
    1>            _Alloc=std::allocator<POINT>
    1>        ]
    1>        lors de la tentative de mise en correspondance de la liste des arguments '(std::_Vector_iterator<_Ty,_Alloc>, std::_Vector_const_iterator<_Ty,_Alloc>)'
    1>        with
    1>        [
    1>            _Ty=POINT,
    1>            _Alloc=std::allocator<POINT>
    1>        ]
    Je pensai que c'étais un probleme de surcharge d'opérator, le "=". j'ai essayé de le définir dans la class parents, CElement...
    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
    50
    51
     
    class CElement
    {
     
    protected:
       COLORREF m_Color;                       // Color of an element
       RECT m_EnclosingRect;                  // Rectangle enclosing an element
       int m_Pen;                              // Pen width
       POINT m_Center;
     
    public:
     
       virtual ~CElement(){}  ;                 // Virtual destructor
     
    	CElement (const CElement & );
       // Virtual draw operation
       virtual void Draw(HDC hdc, const CElement* pElement = 0) const {};
       virtual void Move(const SIZE& Size) {}; // Move an element
       RECT GetBoundRect() const;             // Get the bounding rectangle for an element
     
       CElement &operator =(vector<CElement>::iterator aElement) 
    	{   
     
     
    			m_Color =  aElement->m_Color;
    			m_EnclosingRect = aElement->m_EnclosingRect;
    			m_Pen = aElement->m_Pen;
    			m_Center.x = aElement->m_Center.x;
     
     
            // by convention, always return *this
            return *this;
    	}
     
    	CElement &operator =(const CElement &aElement) 
    	{   // swap this with other
    		if(this!=&aElement)
    		{
    			m_Color =  aElement.m_Color;
    			m_EnclosingRect = aElement.m_EnclosingRect;
    			m_Pen = aElement.m_Pen;
    			m_Center = aElement.m_Center;
    		}
     
            // by convention, always return *this
            return *this;
    	}
     
    protected:
       CElement(){}     ;                       // Default constructor
    };


    S'il vous plais, je cherche absolument à utiliser un moyen pour stoqué mes (structure) points, je peine...

    Merci pour votre aide

  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
    La fonction Draw est const, ce qui signifie qu'à l'intérieur de celle-ci les variables membres sont const, donc il te fait un const_iterator et non un iterator pour parcourir ton vector.

    En ce qui concerne push_back, tu ne peux pas l'utiliser dans une fonction const, car elle modifie le vecteur.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut Merci
    ça marche!

    En moins d'une heure le problème est résolue, génial !

    Merci Laurent...

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 77
    Points
    77
    Par défaut Une dernière question
    ça bug, et je fatigue un peu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    vector<POINT>::const_iterator POSITION;
    if(this->m_PointList.size()>0)
    	{  
    		POSITION = m_PointList.begin();
     
    		MoveToEx(hdc,(*POSITION).x,(*POSITION).y,NULL);
     
    		While(++POSITION!=m_PointList.end())
    		{	LineTo(hdc,POSITION->x,POSITION->y);
    		}
    	}
    lol ça y est, j'ai trouvé, j'ai mis le W de while en majuscule!

    Je ne sais pas trop, c'est la première fois que j'utilise un vector (ou une list)...

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

Discussions similaires

  1. 2 petits points css à régler pour mon site
    Par ndsaerith dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 11/11/2010, 12h25
  2. Choix d'un SGBDR pour mon projet: Interbase?
    Par super16 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 09/07/2004, 08h15
  3. oracle ou interabse pour mon application ?
    Par nytmare dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 22/04/2004, 11h17
  4. quel langage choisir pour mon interface graphique
    Par mrom34 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 09/03/2004, 19h12
  5. Choix de technologies pour mon application
    Par Franco dans le forum Java EE
    Réponses: 5
    Dernier message: 21/10/2003, 14h10

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