Salut tout le monde !

Je suis en train d'étudier les DESIGN PATTERN ... vaste et complexe sujet.

Je rencontre des problèmes à l'implémentation de la "Fabrique Abstraite" et je souhaiterais avoir la confirmation que ce problème vient en fait du compilateur.

J'ai codé 3 classes abstraites :
* CFabriqueAbstraite
* CFenetreAbstraite
* CPorteAbstraite

et 6 classes dérivées :
* CFabriqueConcreteA
* CFabriqueConcreteB
* CFenetreConcreteA
* CFenetreConcreteB
* CPorteConcreteA
* CPorteConcreteB

Ma classe CFabriqueAbstraite contient un constructeur et un destructeur, ainsi que 2 fonctions virtuelles pures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
CFenetreAbstraite* CreerUneFenetre() = 0;
CPorteAbstraite* CreerUnePorte() = 0;
Dans la classe CFabriqueConcreteA je redéfinis ces deux fonctions come suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
CFenetreConcreteA* CreerUneFenetre()
{
     return new CFenetreConcreteA;
}
 
CPorteConcreteA* CreerUnePorte()
{
     return new CPorteConcreteA;
}
Idem pour la classe CFabriqueConcreteB ... sauf que le A se transforme en B

Bref, quand je lance une compilation j'obtient le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
error C2555: 'CFabriqueConcreteA::CreerUnePorte' : overriding virtual function differs from 'CFabriqueAbstraite::CreerUnePorte' only by return type or calling convention
Je sais que les types de retour sont différents mais CPorteConcreteA dérive de CPorteAbstraite, alors pourquoi c'est pas possible de faire ça ?

Il me semble avoir entendu dire que le compilateur VC++ pouvait être la cause de cette erreur, c'est vrai ? Et comment résoudre mon problème ?

D'avance merci[/code]