Bonjour à tous.
J'essaye d'implémenter deux arbres binaires, l'un en une liste, l'autre en un vecteur, ces derniers étant deux sous classes d'une classe abstraite.

Voici le code de ce qui pose problème :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
class Arbre2{
  public:
    class Elem{
      public:
	friend class Arbre2;
	int info;
	virtual const Elem& elemGauche(const Elem &)=0;
	Elem();
    };
 
 
	virtual const Elem & filsGauche(const Elem &)=0;			Arbre2();							
	//Arbre2(const Arbre2&);						//~Arbre2();														
	private:
	   Elem* Rac;												
 
};
 
 
class Arbre2L : public Arbre2{
  public:
    class ElemL : public Elem{
	public:
	  friend class Arbre2L;
	  int info;
	  ElemL *fg,*fd,*pere;
	  ElemL(int,ElemL*,ElemL*);		
	};
 
 
	const ElemL & filsGauche(const Elem &);										
	Arbre2L();							~Arbre2L();													
 
	private:
		ElemL* RacL;
		void Cancel(ElemL*);
		const ElemL& Copie(const ElemL &);
};
 
const Arbre2L::ElemL& Arbre2L::filsGauche(const Arbre2L::Elem& p){
	return (*p.fg);
}
Probleme : Pour respecter la convention d'héritage, je dois passer un const Elem & en paramètre de ma méthode filsGauche. Pour renvoyer le fils gauche, je dois idéalement faire un return(*p.fg). Cependant, p étant un Elem, *fg n'est pas défini et le compilateur ne va pas chercher automatiquement le *fg de ma classe ElemL.

Est-ce que quelqu'un saurait comment arranger ça?