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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
class A
{
  protected:
    A();
  public:
    virtual String method();
};
La classe B dérive de A :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
class B : public A
{
  public:
    B();
    String method();
};
La classe C dérive de A aussi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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