Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Debutant : stl et const

2 réponses
Avatar
Jeremie Fouche
Bonjour

Je suis developpeur C et j'ai <appris> le C++ en entreprise avec les MFC.
Autant dire que quand je suis venu visiter ce newsgroupe, j'ai vu que le C++
devait plutot s'appuyer sur la stl. J'ai donc troqué VC++ contre djgpp et
hop, au boulot, on reprend le C++ à zero.

voila mon probleme (de conception peut etre ?). Le code suit.
la méthode B::GetPos(int) est manifestement const, pourtant gcc n'accepte
pas de compiler. En effet, l'iterateur est const du fait que la méthode est
const, donc le --idx est interdit. Pourtant, je n'appelle que des méthodes
const de A. Comment faire ? Est-ce possible ? Il m'aurait semblé que le fait
que l'iterateur soit local n'affect pas dirrectement l'objet B.

Je ne met pas tout mon code, juste la partie qui ne compile pas.

CODE:

#include <list>

//////////////////////////////////////////////
class A
{
public:
A():m_pos(0),m_value(0) {}
A(int pos, int value):m_pos(pos),m_value(value) {}
virtual ~A(){}

protected:
int m_pos;
int m_value;

public:
int GetPos(void) const { return m_pos; }
};

//////////////////////////////////////////////
typedef list<A> listA;
typedef listA::iterator iterA;

class B
{
public:
B();
virtual ~B();

protected:
listA m_listA;

public:
A GetA(int pos) const
{
A a;
for (iterA idx=m_listA.end(); idx!=m_listA.begin(); --idx)
{
a = *idx;
if (a.GetPos() <= pos)
{
// Stop, on est au bon endroit
break;
}
}

return a;
}
};

//////////////////////////////////////////////
int main(void)
{
return 0;
}

2 réponses

Avatar
Fabien LE LEZ
On Wed, 23 Jun 2004 17:12:55 +0200, "Jeremie Fouche"
:

la méthode B::GetPos(int) est manifestement const, pourtant gcc n'accepte
pas de compiler.


J'ai pas trouvé ta fonction B::GetPos(int), mais mon petit doigt me
dit que remplacer des "iterator" par des "const_iterator" pourrait
peut-être améliorer les choses.

En effet, l'iterateur est const du fait que la méthode est
const,


Non. C'est ce qui est pointé par l'itérateur qui est const.
C'est comme la différence entre un pointeur constant vers un entier,
et un pointeur vers un entier constant.

donc le --idx est interdit.


Non.


--
schtroumpf schtroumpf

Avatar
Jeremie Fouche
Fabien LE LEZ a écrit dans le message :

On Wed, 23 Jun 2004 17:12:55 +0200, "Jeremie Fouche"
:

la méthode B::GetPos(int) est manifestement const, pourtant gcc n'accepte
pas de compiler.


J'ai pas trouvé ta fonction B::GetPos(int), mais mon petit doigt me


Ha, elle s'appelle en fait GetA(int), alors bon...

dit que remplacer des "iterator" par des "const_iterator" pourrait
peut-être améliorer les choses.


Voui, merci.Je n'avais pas compris l'utilité du const_iterator. C'est fait.


En effet, l'iterateur est const du fait que la méthode est
const,


Non. C'est ce qui est pointé par l'itérateur qui est const.
C'est comme la différence entre un pointeur constant vers un entier,
et un pointeur vers un entier constant.


Bah voila, tout est dit. Merci bien.

--
Jérémie