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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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);
}
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
5
6
class DeplacableHorizontal: public Deplacable{
public:
	DeplacableHorizontal(short vitesseH=0);
	virtual void deplGauche();
	virtual void deplDroite();
...
et voici leurs implémentations
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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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à.