[C++] Accès à une donnée protected

Accès à une donnée protected [C++] - C++ - Programmation

Marsh Posté le 27-05-2004 à 22:47:33    

Voila le problème: j'ai une classe CPileFIfo dérivée (public) de la classe CBasePile. la fonction pour empiler un element est en virtuelle pure, car elle doit servir pour une pile fifo ou une filo.
 

Code :
  1. void CPileFifo::operator <(const int i){
  2. CBasePile *p=NULL;
  3. CPileFifo *q=NULL;
  4. p=this;
  5. while (p->getSuiv()!=NULL){
  6.  p=p->getSuiv();//pour acceder au suiv de la classe CBasePile
  7. }
  8. // q=p;
  9. q=new CPileFifo;
  10. if (q!=NULL){//si allocation reussie
  11.  q->champ=i;//initialisation du nouvel element
  12.  q->suiv=NULL;
  13. //  p=p->getSuiv();
  14. //  p=q;
  15.  p->suiv=q; }
  16. }


 
Visual me fait une erreur C2248: 'suiv' : cannot access protected member declared in class 'CBasePile' à la ligne p->suiv=q . Je comprends pas pourquoi ni comment y remedier. Zavez une idée ?


Message édité par Bleuarff le 27-05-2004 à 22:55:32

---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 27-05-2004 à 22:47:33   

Reply

Marsh Posté le 28-05-2004 à 07:14:05    

void CPileFifo::operator <(const int i)
 
 
aurevoir
 
le type de retour est pas bon, y a pas de const sur this, et plutot que d'écrire ça, il te faut écrire un constructeur qui prend un int de argument. commence par ça


Message édité par Taz le 28-05-2004 à 07:14:55
Reply

Marsh Posté le 28-05-2004 à 07:17:30    

du reste comme tu nous montre rien ...

Reply

Marsh Posté le 28-05-2004 à 09:03:52    

Une pile fifo ca s'appelle une queue ou une file ( une pile est, par définition lifo )

Reply

Marsh Posté le 28-05-2004 à 09:09:40    

Bleuarff a écrit :


Visual me fait une erreur C2248: 'suiv' : cannot access protected member declared in class 'CBasePile' à la ligne p->suiv=q . Je comprends pas pourquoi ni comment y remedier. Zavez une idée ?


Apparament le compilo n'a pas compris que le code de ta fonction était membre de ta classe CPileFifo. Essaie d'appeler directement une fonction membre de CPileFifo dans le code de ta fonction opérateur, et regarde si ca marche.

Reply

Marsh Posté le 28-05-2004 à 09:36:51    

moi je veux voir le code de la définition

Reply

Marsh Posté le 01-06-2004 à 13:32:00    

Alors voila la def de la classe CPileFifo:

Code :
  1. #include "CBasePile.h"
  2. class CPileFifo:public CBasePile{
  3. public:
  4. void operator <(const int);
  5. };


 
celle de la classe CBasePile:

Code :
  1. #include <iostream>
  2. using namespace std;
  3. #include <stdlib.h>
  4. class CBasePile{
  5. protected:
  6. int champ;
  7. CBasePile *suiv;
  8. public:
  9. CBasePile();
  10. CBasePile* getSuiv();
  11. virtual void operator <(const int)=0;
  12. void operator >(int &i);
  13. };


 
Ca vous aide ?
 
Taz> un constructeur je veux bien, mais il me faut bien une fonction pour empiler un element.
Ace>une pile fifo est une file je sais bien, mais je respecte les noms qu'on me donne dans l'énoncé du tp :o.


---------------
©2008 Bleuarff Corp.
Reply

Marsh Posté le 01-06-2004 à 13:51:06    

problème résolu avec un accesseur au champ suiv dans CBasePile.

Code :
  1. void CBasePile::setSuiv(CBasePile* suiv){
  2. this->suiv=suiv;
  3. }


---------------
©2008 Bleuarff Corp.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed