Impossible d'implémenter une classe abstraite alors que les méthodes abstraites sont implémentées
Bonjour à tous, et bonnes fêtes de fin d'année.
Bon j'ai un souci, sous visual studio 2008 en C++.
Voila j'ai créé une "interface" Deplacable qui contient une seule méthode:
Code:
virtual void deplacer(int x, int y)=0;
Vu quelle est virtuelle pure, c'est pour ça que j'ai défini cette classe comme une interface. Bref j'ai une classe ObjetAnime qui hérite de Deplacable et qui implémente donc la méthode deplacer(int x, int y).
Code:
1 2 3 4
| void ObjetAnime::deplacer(int x, int y){//déplacement relatif
setX(getX()+x);
setY(getY()+y);
} |
Maintenant j'ai une classe abstraite DeplacableHorizontal qui hérite de Deplacable:
Code:
1 2 3 4 5 6
| class DeplacableHorizontal: public Deplacable{
public:
DeplacableHorizontal(short vitesseH=0);
virtual void deplGauche();
virtual void deplDroite();
... |
et voici leurs implémentations
Code:
1 2 3 4 5 6 7 8
|
void DeplacableHorizontal::deplGauche(){
deplacer(-_vitesseH,0);
}
void DeplacableHorizontal::deplDroite(){
deplacer(_vitesseH,0);
} |
Et c'est maintenant que le problème arrive. J'ai une classe Missile qui hérite de ObjetAnime et de DeplacableHorizontal.
Et à la compil, je me prend une erreur C2259: "Missile": impossible d'instancier une classe abstraite à cause des membres suivants:
'void Deplacable::deplacer(int,int)' est abstrait
Pourtant deplacer est défini dans la classe ObjetAnime.
Faut-il absolument écrire dans le Missile.h
Code:
virtual void deplacer(int x, int y);
pour que cela fonctionne, même si on ne l'implémente pas dans le cpp?
Je trouve cela un peu tordu de redéfinir des méthodes qui le sont déjà.