J'ai un problème avec mes méthodes virtuelles dans une classe dérivée. Voici mes classes C++ (simplifiées).Le compilateur ne trouve pas les méthodes de la classe de base
class Base
virtual method accept(MyVisitor1* v) { /*implementation is here*/ };
virtual method accept(MyVisitor2* v) { /*implementation is here*/ };
virtual method accept(MyVisitor3* v) { /*implementation is here*/ };
class DerivedClass
virtual method accept(MyVisitor2* v) { /*implementation is here*/ };
L'utilisation suivante provoque VS 2005 pour donner: "erreur C2664: 'ClasseDérivée :: accept': ne peut pas convertir le paramètre 1 de 'Visitor1 *' à 'Visitor2 *".
DerivedClass c;
MyVisitor1 v1;
c.accept(v1);
j'attendais le compilateur de trouver et d'appeler Base :: accept (MyVisitor1) pour mes ClasseDérivée aussi bien. Évidemment, cela ne fonctionne pas, mais je ne comprends pas pourquoi. Des idées?
Merci,
Paul
La classe Derived dérive-t-elle réellement de la classe Base? Est-ce l'héritage public? Les méthodes de la classe Base sont-elles également publiques? – Patrick
Vous devriez probablement fournir du code qui compile réellement. Il semble que DerivedClass ne dérive pas réellement de Base, mais puisque le code fourni n'est pas C++, nous ne pouvons pas le savoir avec certitude. –
S'il vous plaît poster le code réel. Etes-vous sûr que vous avez utilisé l'héritage public? –