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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part virtual void deplacer(int x, int y)=0;
Maintenant j'ai une classe abstraite DeplacableHorizontal qui hérite de Deplacable:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void ObjetAnime::deplacer(int x, int y){//déplacement relatif setX(getX()+x); setY(getY()+y); }
et voici leurs implémentations
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class DeplacableHorizontal: public Deplacable{ public: DeplacableHorizontal(short vitesseH=0); virtual void deplGauche(); virtual void deplDroite(); ...
Et c'est maintenant que le problème arrive. J'ai une classe Missile qui hérite de ObjetAnime et de DeplacableHorizontal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void DeplacableHorizontal::deplGauche(){ deplacer(-_vitesseH,0); } void DeplacableHorizontal::deplDroite(){ deplacer(_vitesseH,0); }
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
pour que cela fonctionne, même si on ne l'implémente pas dans le cpp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual void deplacer(int x, int y);
Je trouve cela un peu tordu de redéfinir des méthodes qui le sont déjà.
Partager