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 :
La classe B dérive de A :
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 C dérive de A aussi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class B : public A { public: B(); 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
5
6 class C : public A { public: C(); String method(); };
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 B inst0(); B inst1(); C inst2(); std::list<A> liste;
Cela fonctionne très bien.
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(); } }
Maintenant, si j'ajoute dans le 'main' avant la boucle le code ci-dessous :
Le compilateur me sort une erreur "no matching function for call to 'std::list<A>::push_back(B (&)())'".
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);
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
Partager