C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Debutant : stl et const

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Jeremie Fouche
Guest





PostPosted: Wed Jun 23, 2004 3:12 pm    Post subject: Debutant : stl et const Reply with quote



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





PostPosted: Wed Jun 23, 2004 3:24 pm    Post subject: Re: Debutant : stl et const Reply with quote



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





PostPosted: Thu Jun 24, 2004 8:01 am    Post subject: Re: Debutant : stl et const Reply with quote




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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.