Bonjour,
voila mon problème: j'aimerai créer une liste d'affichage qui contient des objets differents. Pour ce faire je dois donc les faire heriter d'une même classe mère qui possède une fonction polymorphe.

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
 
#include <list>
class A
{
public:
	virtual void affiche() { std::cout << "A"; };
};
 
class B : public A
{
public:
	virtual void affiche() { std::cout << "B"; }
};
 
int main()
{
	std::list<A> liste;
	B b;
 
	liste.push_back(b);
 
	std::list<A>::iterator i=liste.begin();
	while(i!=liste.end())
	{
		i->affiche();
		i++;
	}
 
	return 0;
}
Sauf que, au lieu de m'afficher "B", il m'affiche "A". Le compilateur ne comprend pas qui doit appeller la fonction de l'objet B.

Est-ce une erreure de code ou un bug de mon compilateur (VC++6) ?

Certes, je pourrai utiliser un tableau, là, ça marche, mais la stl me ferai gagner bcp de temps.

Avez vous des solutions differentes ?!