 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Jeremie Fouche Guest
|
Posted: Wed Jun 23, 2004 3:12 pm Post subject: Debutant : stl et const |
|
|
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;
}
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Wed Jun 23, 2004 3:24 pm Post subject: Re: Debutant : stl et const |
|
|
On Wed, 23 Jun 2004 17:12:55 +0200, "Jeremie Fouche"
<jeremie.fouche.tonmasque (AT) tiscali (DOT) fr>:
| Quote: | 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.
| Quote: | 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.
| Quote: | donc le --idx est interdit.
|
Non.
--
schtroumpf schtroumpf
|
|
| Back to top |
|
 |
Jeremie Fouche Guest
|
Posted: Thu Jun 24, 2004 8:01 am Post subject: Re: Debutant : stl et const |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> a écrit dans le message :
[email]318jd0lkqtpuhok3po40t6ld72c60spg5q (AT) 4ax (DOT) com[/email]...
| Quote: | On Wed, 23 Jun 2004 17:12:55 +0200, "Jeremie Fouche"
[email]jeremie.fouche.tonmasque (AT) tiscali (DOT) fr[/email]>:
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...
| Quote: | 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.
| Quote: |
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
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|