Bonjour.

Je dois coder un arbre avec possibilité de l'afficher.

Pour cela j'ai une classe de base A et une classe dérivée B, par exemple :
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
 
class A
{
protected:
  int m_val;
  A * m_ptr;
};
 
class B : public A
{
public:
  void draw(void)
  {
    A * ptr = m_ptr;
    ptr->m_val = 0;
  }
};
Le problème quand je compile est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
foo.cpp: In member function ‘void B::draw()’:
foo.cpp:6: error: ‘int A::m_val’ is protected
foo.cpp:16: error: within this context
C'est peut-être un problème de conception, mais j'aurai aimé garder quelque chose de simple et esthétique. Les solutions que j'envisage sont :

(1) déclarer une fonction draw friend dans A (pas estéthique à mon goùt).

(2) Caster m_ptr en B* au lieu de A* dans la fonction doSmth (c'est pas sécurisé du tout).

(3) rendre les membres de A public et faire un heritage privé (problème suivant le nombre de niveau d'héritage et je perds les fonctions publiques de A).

(4) Faire des accesseurs aux membres protected de A (beaucoup de travail mais certaienemt le plus élégant)

Je vous consulte pour savoir si vous voyez une meilleure conception ou une meilleure solution.

Merci d'avance.