Problème pour enregistrer des instances de classes dérivées dans une liste
Bonjour,
Je reprends le C++ (ESP8266 dans l'environnement Arduino) après ne l'avoir pas pratiquer pendant une décennie et je me retrouve confronter à un problème pour lequel je ne trouve pas de solution.
Alors voilà, j'ai une classe A dont le constructeur est 'private' (pour ne pas pourvoir l'instancier) et une méthode est 'virtual' (qui sera appeler depuis une 'list' d'instance héritant de l'objet A).
Comme ceci :
Code:
1 2 3 4 5 6 7
| class A
{
protected:
A();
public:
virtual String method();
}; |
La classe B dérive de A :
Code:
1 2 3 4 5 6
| class B : public A
{
public:
B();
String method();
}; |
La classe C dérive de A aussi :
Code:
1 2 3 4 5 6
| class C : public A
{
public:
C();
String method();
}; |
Trois instanciations des deux objets ainsi que la liste qui va stocker les instances.
Code:
1 2 3 4
| B inst0();
B inst1();
C inst2();
std::list<A> liste; |
ET un bout de code pour appeler 'method' pour chaque instance stockée dans la 'list'.
Code:
1 2 3 4 5 6 7 8 9 10
| int main(int argc, char ** argv)
{
String temp;
for (std::list<A>::iterator it = liste.begin(); it != liste.end(); ++it)
{
temp += it->method();
}
} |
Cela fonctionne très bien.
Maintenant, si j'ajoute dans le 'main' avant la boucle le code ci-dessous :
Code:
1 2 3
| liste.push_back(inst0);
liste.push_back(inst1);
liste.push_back(inst2); |
Le compilateur me sort une erreur "no matching function for call to 'std::list<A>::push_back(B (&)())'".
Ce qui se comprend mais comment on stocke différentes instances de classes dérivées dans une liste unique typée classe mère.
Si quelqu'un peut m'éclairer voire m'aider à trouver une solution, cela serait formidable.
D'avance merci
Thoma